房地产投资潜力分析(使用熵权法、主成分分析、因子分解进行排序)——课程作业回顾


前言

课程作业:
某房地产开发公司拟在长江三角洲、珠江三角洲和环渤海地区中选择有投资价值潜力的目标城市进行投资

- 如何衡量投资潜力?
- 给出一些指标
请对备选城市进行综合评价,遴选出具有投资潜力的城市


一、数据描述

数据如下所示

城市 GDP 人均可支配收入 城市化水平 人均使用面积 户籍人口数量 商品房销售均价 商品房销售面积 商品房施工面积
0 深圳 5684.39 22567 83.7 19.7 196.83 9230 784.63 3122.10
1 北京 9006.20 21989 84.3 20.1 1213.30 8792 2176.60 10438.60
2 杭州 3440.99 19027 62.1 21.0 666.31 7751 762.50 4545.33
3 上海 10296.97 20668 88.7 16.5 1368.10 7038 3025.40 10938.75
4 广州 6068.41 19851 69.5 19.4 760.72 6545 1316.88 5460.37
5 宁波 2864.50 19674 59.0 18.7 560.40 5437 601.10 2200.00
6 天津 4337.73 14283 75.7 26.1 948.88 5013 1458.60 4271.14
7 南京 2774.00 17538 62.1 20.4 607.23 5002 932.40 3264.44
8 苏州 4820.26 14451 62.1 20.4 615.55 4958 932.40 5058.09
9 大连 2569.70 13350 57.5 17.5 572.10 4844 628.80 2196.10
10 珠海 749.60 17671 59.4 25.0 92.63 4731 178.88 678.55
11 台州 1467.48 19036 57.2 32.8 564.66 4726 259.72 1238.32
12 绍兴 1678.19 19486 57.2 25.4 435.50 4500 366.00 1355.36
13 常州 1560.00 16649 62.1 28.4 354.70 4500 479.40 1701.90
14 南通 1758.34 14058 62.1 29.4 769.79 4500 473.27 1165.86
15 无锡 3300.00 18189 70.0 31.3 457.80 4315 626.00 2322.17
16 嘉兴 1340.00 17828 52.0 32.1 335.50 4299 359.50 1393.70
17 舟山 333.20 17525 52.0 22.2 96.58 4299 91.80 300.00
18 东莞 2624.63 25320 65.0 45.2 168.31 4192 379.43 1431.27
19 湖州 760.89 17503 53.0 27.0 257.89 4134 195.19 887.51

可以看到有很多变量是与经济指标相关的,就意味着这些变量有可能是高度相关的,接下来就是对变量进行描述性统计。

二、变量描述性统计

1.单变量直方图

代码如下:

import pandas as pd
import matplotlib.pyplot as plt  # 导入包

data=pd.read_excel('城市投资潜力.xlsx') # 读入数据
plt.rcParams['font.sans-serif']=['simhei'] # 添加中文字体为黑体
plt.rcParams['axes.unicode_minus'] =False
def draw(data):
    data.hist(figsize=(16,14))
    #plt.savefig("Plots.jpg",dpi=300, pad_inches = 0)
    plt.title('各变量的频数分布图')
    plt.show()   
draw(data.iloc[:,1:])

直方图

可以看到,大部变量都是右偏,分布较不规律,但可能因为样本个数较少导致的。

2.相关系数图

代码如下:

import seaborn as sns
import matplotlib.pyplot as plt
import numpy as np

data1=data.iloc[:,1:] #定义数值型变量

import numpy as np
print(np.var(data1))

fig, ax = plt.subplots(figsize = (9,9))

corr = data1.corr()

sns.heatmap(corr, vmax=1,vmin = 0, 
            xticklabels= True, yticklabels= True, square=True, cmap="YlGnBu")

相关系数矩阵

可以看到有的变量之间的相关系数较高,如商品房销售面积和商品房施工面积,户籍人口数量和商品房销售面积、商品房施工面积等,所以后续考虑对这些变量进行筛选

3.散点图矩阵

代码如下:


import mglearn

import matplotlib.pyplot as plt
 
grr = pd.plotting.scatter_matrix(data.iloc[:,1:],figsize=(15,15),marker='o',hist_kwds={
    
    'bins':20},cmap=mglearn.cm3)

散点图矩阵

从散点图矩阵中可以看出

  • GDP与商品房施工面积、商品房销售面积、城市化水平等变量相关性比较高
  • 商品房销售面积和商品房施工面积相关性较高

所以对数据进行主成分分析、因子分析有一定依据

三、城市房地产投资潜力分析

1.变量选择及逆指标的变换

(1)指标选取

参考 https://www.sohu.com/a/423745747_796547 选取指标

投资潜力指标:
  • 经济发展情况(GDP):正向指标,衡量地区经济发展状况。
  • 人口规模(户籍人口数量):正向指标,衡量地区房地产潜在的总需求。
  • 需求规模(商品房销售面积):正向指标,衡量报告期内房地产市场的需求。
  • 购买力水平 (人均可支配收入):正向指标,衡量房地产市场的购买力
  • 城市化水平:正向指标,衡量城市发展状况及经济水平。
  • 商品房销售均价:正向指标衡量
  • 人均使用面积:负向指标,人均使用面积=住宅使用面积/居住人口,衡量了一个城市现有住宅,人均使用面积越小说明还有发展潜力.
  • 供给规模(商品房施工面积):负向指标,施工面积反映了1~2年内的期房和现房供应量,衡量了竞争关系。
投资风险指标:
  • 供求风险=施工面积/销售面积.负向指标,施工面积反映了1~2年内的期房和现房供应量;施工面积/销售面积比值的变化反映供求是否平衡发展,该指标的异常变化能对下一年度的价格走势起到一定预示性作用。
  • 购买力风险=商品房销售均价/人均可支配收入,负向指标,衡量现在房价水平是否合理

由上分析可知,人均使用面积、商品房施工面积、供求风险、购买力风险为逆向指标,需要进行逆向化处理

2.指标变换方法

参考文献:《综合评价中指标标准化方法研究》李美娟

对负向指标进行转换及所有指标的归一化处理:(变量取值范围不变,且保留了变量的变异程度信息)

  • 负向指标转换:
    x i , j ′ = m a x 1 ≤ i ≤ n x i , j − x i , j + m i n 1 ≤ i ≤ n x i , j x^{'}_{i,j}=\mathop{max}\limits_{1 \leq i \leq n} x_{i,j} -x_{i,j}+\mathop{min}\limits_{1 \leq i \leq n} x_{i,j} xi,j=1inmaxxi,jxi,j+1inminxi,j
  • 所有变量归一化处理
    y i , j = x i , j ∑ i = 1 n x i , j , ( 1 ≤ i ≤ n , 1 ≤ j ≤ m ) y_{i,j}=\frac{x_{i,j}}{\sum_{i=1}^{n}x_{i,j}},(1\leq i\leq n,1\leq j\leq m) yi,j=i=1nxi,jxi,j,(1in,1jm)
  • 为避免由于样本个数n较多造成 y i , j y_{i,j} yi,j较小的情形,乘以n
    y i , j ′ = y i , j × n , ( 1 ≤ i ≤ n , 1 ≤ j ≤ m ) y^{'}_{i,j}=y_{i,j} \times n,(1\leq i\leq n,1\leq j\leq m) yi,j=yi,j×n,(1in,1jm)

这种方法保留了以下优点:

  • (l)经标准化处理后的标准值较真实地反映原指标值之间的关系,考虑了指标值之间的差异性;

  • (2)正、逆向指标均化为正向指标,即均具有指标值越大越好的特性;

  • (3)不管决策矩阵 X X X中的指标值是正数还是负数,都适用,经过该标准化处理后,标准化指标值满足, 0 < y < m 0<y<m 0<y<m

克服了以下缺点:

  • (l)忽略了决策矩阵 X X X中的指标值的差异性;

  • (2)要求任意 x > 0 x>0 x>0,如果存在 x ≤ 0 x\leq 0 x0则不适用;

  • (3)进行了非线性变换,变换后的指标值无法客观地反映原始指标间的相互关系。

  • (4)正、逆向指标的方向没有发生变化。即正向指标归一化变换后,仍是正向指标。逆向指标归一化变换后,也仍是逆向指标。该标准化方法保持了原始指标值间的相互关系。

#构造上述负向指标处理的函数
def convert(x):
    re=[max(x)-i+min(x) for i in x]
    return re
#构造上述归一化处理的函数
def rescale(x):
    re=[i*len(x)/sum(x) for i in x]
    return re
#指标归一化min-max
pos_var=['GDP', '人均可支配收入', '城市化水平', '户籍人口数量', '商品房销售均价','商品房销售面积']
neg_var=['人均使用面积','商品房施工面积','供求风险','购买力风险']
trans_data=data.copy()
trans_data['供求风险']=trans_data['商品房施工面积']/trans_data['商品房销售面积']
trans_data['购买力风险']=trans_data['商品房销售均价']/trans_data['人均可支配收入']
#负向指标转换
trans_data.loc[:,neg_var]=trans_data.loc[:,neg_var].apply(convert)
#保留正向、负向指标和城市名
trans_data=trans_data.loc[:,['城市']+pos_var+neg_var]
#归一化处理
trans_data.iloc[:,1:]=trans_data.iloc[:,1:].apply(rescale)
#归一化后的变量描述
trans_data.describe()
GDP 人均可支配收入 城市化水平 户籍人口数量 商品房销售均价 商品房销售面积 人均使用面积 商品房施工面积 供求风险 购买力风险
count 20.000000 20.000000 20.000000 20.000000 20.000000 20.000000 20.000000 20.000000 20.000000 20.000000
mean 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000
std 0.795272 0.164151 0.166660 0.624525 0.287475 0.905143 0.188521 0.368436 0.182380 0.245504
min 0.098820 0.728189 0.803275 0.167766 0.759885 0.114546 0.448735 0.037312 0.550274 0.599463
25% 0.455805 0.943073 0.887078 0.572496 0.818659 0.454659 0.898831 0.858063 0.933263 0.830985
50% 0.800562 0.982292 0.959296 1.018820 0.880007 0.765574 1.036171 1.124427 1.046228 1.063730
75% 1.322260 1.075552 1.075539 1.249527 1.050310 1.163428 1.134077 1.232875 1.091579 1.195953
max 3.053873 1.381105 1.370202 2.477818 1.696598 3.775026 1.229263 1.360495 1.331579 1.480923

2.熵权法

  1. 目前有关房地产投资的分析中有关变量权重的主要使用的方法有:
  • 专家打分法
  • 熵权值法

因为第一种方法需要专家进行打分,且不同专家打分可能会导致不同的排序结果,目前没有针对各个变量权威的权重,而且这个方法有一定的主观性,这里考虑熵权法进行排序。

  1. 在信息论中,熵是对不确定性的一种度量。不确定性越大,熵就越大,包含的信息量越大;不确定性越小,熵就越小,包含的信息量就越小。
    根据熵的特性,可以通过计算熵值来判断一个事件的随机性及无序程度,也可以用熵值来判断某个指标的离散程度,指标的离散程度越大,该指标对综合评价的影响(权重)越大。比如样本数据在某指标下取值都相等,则该指标对总体评价的影响为0,权值为0,熵权法是一种客观赋权法,因为它仅依赖于数据本身的离散性。

  2. 方法描述:对 n n n个样本, m m m个指标,则 x i , j x_{i,j} xi,j为第 i i i个样本的第 j j j个指标的数值( i = 1 , ⋯   , n ,   j = 1 , ⋯   , m i=1,\cdots,n,\ j=1,\cdots,m i=1,,n, j=1,,m );

  • 异质指标同质化:在上述分析中已对指标进行了同质化处理故不再考虑
  • 首先计算第 j j j项指标下第 i i i个样本值占该指标的比重
    p i , j = x x , j ∑ i = 1 n x i , j , i = 1 , ⋯   , n , j = 1 , ⋯   , m p_{i,j}=\frac{x_{x,j}}{\sum_{i=1}^{n}x_{i,j}},i=1,\cdots,n,j=1,\cdots,m pi,j=i=1nxi,jxx,j,i=1,,n,j=1,,m
  • 然后计算第 j j j项指标的熵值
    e j = − k ∑ i = 1 n p i , j l n ( p i , j ) , p = 1 / l n ( n ) > 0 , e j ≥ 0 e_j=-k\sum_{i=1}^{n}p_{i,j}ln(p_{i,j}),p=1/ln(n)>0,e_j\geq0 ej=ki=1npi,jln(pi,j),p=1/ln(n)>0,ej0
  • 计算信息熵冗余度(差异)
    d j = 1 − e j , j = 1 , ⋯   , m d_j=1-e_j,j=1,\cdots,m dj=1ej,j=1,,m
  • 计算各项指标的权重
    w j = p j ∑ j = 1 m p j , j = 1 , ⋯   , m w_j=\frac{p_j}{\sum_{j=1}^{m}p_j},j=1,\cdots,m wj=j=1mpjpj,j=1,,m

代码如下:

import math
from numpy import array
    
def cal_weight(x):
    '''熵值法计算变量的权重'''
    # 求k
    rows = x.index.size  # 行
    cols = x.columns.size  # 列
    k = 1.0 / math.log(rows)
 
    lnf = [[None] * cols for i in range(rows)]
 
    # 矩阵计算-- 信息熵 p=array(p)
    x = array(x)
    lnf = [[None] * cols for i in range(rows)]
    lnf = array(lnf)
    for i in range(0, rows):
        for j in range(0, cols):
            if x[i][j] == 0:
                lnfij = 0.0
            else:
                p = x[i][j] / x.sum(axis=0)[j]
                lnfij = math.log(p) * p * (-k)
            lnf[i][j] = lnfij
    lnf = pd.DataFrame(lnf)
    E = lnf
    
    d = 1 - E.sum(axis=0)# 计算冗余度
    
    w = [[None] * 1 for i in range(cols)]# 计算各指标的权重
    for j in range(0, cols):
        wj = d[j] / sum(d)
        w[j] = wj# 计算各样本的综合得分,用最原始的数据
          
    w = pd.DataFrame(w)
    return w

w = cal_weight(trans_data.iloc[:,1:])  # 调用cal_weight
w.index = trans_data.columns.tolist()[1:]
w.columns = ['weight']
print(w)
print('运行完成!')
        weight

GDP 0.272662
人均可支配收入 0.012789
城市化水平 0.012700
户籍人口数量 0.186742
商品房销售均价 0.035685
商品房销售面积 0.317972
人均使用面积 0.018868
商品房施工面积 0.096012
供求风险 0.016948
购买力风险 0.029620
运行完成!

score=np.dot(trans_data.iloc[:,1:],w)
score=pd.DataFrame(score)
score.columns = ['熵权值法得分']
score['城市']=data['城市']
score=score[['城市','熵权值法得分']]
score['熵权值法排名']=score['熵权值法得分'].rank(ascending=False)
score
城市 熵权值法得分 熵权值法排名
0 深圳 1.083324 6.0
1 北京 2.155166 2.0
2 杭州 1.010515 8.0
3 上海 2.643810 1.0
4 广州 1.474079 3.0
5 宁波 0.900653 10.0
6 天津 1.454370 4.0
7 南京 1.022953 7.0
8 苏州 1.153888 5.0
9 大连 0.875185 11.0
10 珠海 0.413309 19.0
11 台州 0.651281 16.0
12 绍兴 0.673925 13.0
13 常州 0.671696 14.0
14 南通 0.828544 12.0
15 无锡 0.900895 9.0
16 嘉兴 0.601033 17.0
17 舟山 0.352385 20.0
18 东莞 0.664683 15.0
19 湖州 0.468305 18.0

3.主成分分析

(1)变换后数据之间的相关性

import seaborn as sns
import matplotlib.pyplot as plt
import numpy as np

data1=trans_data.iloc[:,1:] #定义数值型变量

import numpy as np
print(np.var(data1))

fig, ax = plt.subplots(figsize = (9,9))

corr = data1.corr()

sns.heatmap(corr, vmax=1,vmin = 0, 
            xticklabels= True, yticklabels= True, square=True, cmap="YlGnBu")

经过变换过后变量间的相关系数矩阵图
从变量的相关性分析中可以看到,有多个变量相关,首先考虑对变量进行主成分分析,且上述变量主要分了两类

from pca import pca
model = pca() # 初始化保留所有主成分
# 其他形式 model = pca(n_components=2)保留两个主成分 model = pca(n_components=0.95)方差贡献度达95%为止

data2=trans_data.iloc[:,1:]# 数据准备index为城市名,其余列保留
data2.index=data.iloc[:,0]
results = model.fit_transform(data2)#拟合

fig, ax = model.plot()# 画出累计方差贡献度图,选取两个主成分比较合适

主成分分析方差贡献度
从结果中可以看到,两个主成分就可以解释95%的变异,所以保留两个主成分进行后续分析

model = pca(n_components=2)

results = model.fit_transform(data2)#拟合

fig, ax = model.scatter()# 前两个主成分画图

fig, ax = model.biplot(n_feat=4)# Make biplot with the number of features

主成分分析
主成分分析结果

(2)主成分法结果

采用对各个主成分对方差的贡献程度进行加权,可以看到主成分1主要与商品房销售面积、GDP、人均使用面积、商品房施工面积有关,主成分2主要与户籍人口数量、人均可支配收入、城市化水平、商品房销售均价、供求风险、购买力风险

model.results['topfeat']
PC feature loading type
0 PC1 商品房销售面积 0.643434 best
1 PC2 户籍人口数量 -0.659184 best
2 PC1 GDP 0.555985 weak
3 PC2 人均可支配收入 0.276068 weak
4 PC2 城市化水平 0.127721 weak
5 PC2 商品房销售均价 0.445650 weak
6 PC1 人均使用面积 0.067279 weak
7 PC1 商品房施工面积 -0.259490 weak
8 PC2 供求风险 -0.195134 weak
9 PC2 购买力风险 -0.137929 weak
def min_max(x):
    re=[(i-min(x))/(max(x)-min(x)) for i in x]
    return re
# 按方差贡献计算各主成分的权重
explained_var=model.results['explained_var']
w_pca = pd.DataFrame([explained_var[0],explained_var[1]-explained_var[0]]/explained_var[1]) #累计值要扣除
w_pca.index = ['PC1','PC2']
w_pca.columns = ['weight']
print(w_pca)
#综合得分
score_pca=np.dot(pca_df,w_pca)
score_pca=pd.DataFrame(score_pca)
score_pca.columns = ['主成分分析-熵权值法得分']
score_pca['城市']=data['城市']
score_pca=score_pca[['城市','主成分分析-熵权值法得分']]
score_pca.sort_values(by='主成分分析-熵权值法得分',ascending=False)

4.因子分解

(1)巴特利球形度检验、KMO检验

print('巴特利球形度检验')
from factor_analyzer.factor_analyzer import calculate_bartlett_sphericity
chi_square_value,p_value=calculate_bartlett_sphericity(data2)
print('卡方值:',chi_square_value,'P值', p_value)

#相关性检验kmo要大于0.5
from factor_analyzer.factor_analyzer import calculate_kmo
kmo_all,kmo_model=calculate_kmo(data2)
print('KMO检验:',kmo_model)

输出:

巴特利球形度检验
卡方值: 273.419703800147 P值 7.400205772134435e-35
KMO检验: 0.6117754048691861

巴特利球形度检验拒绝原假设说明变量之间存在相关性,适合做因子分析,相关性检验kmo值为0.5

from factor_analyzer import FactorAnalyzer
#因子分析
fa = FactorAnalyzer(8, rotation='varimax',method='principal',impute='mean')#初始化,方法为
fa.fit(data2)
ev, v = fa.get_eigenvalues()
print('相关矩阵特征值:',ev)
#Create scree plot using matplotlib
plt.figure(figsize=(8, 6.5))
plt.scatter(range(1,data2.shape[1]+1),ev)
plt.plot(range(1,data2.shape[1]+1),ev)
plt.title('碎石图',fontdict={
    
    'weight':'normal','size': 25})
plt.xlabel('因子',fontdict={
    
    'weight':'normal','size': 15})
plt.ylabel('特征值',fontdict={
    
    'weight':'normal','size': 15})
plt.grid()# plt.savefig('E:/suishitu.jpg')
plt.show()

#确定因子个数
n_factors = sum(ev>1)

相关矩阵特征值: [5.90893406e+00 1.54019996e+00 1.27561274e+00 6.96807251e-01
3.58371733e-01 1.45974929e-01 3.72301362e-02 2.26174313e-02
9.24062839e-03 5.01113610e-03]
因子分解碎石图

确定最优因子个数为两个,继续观察因子特征

(2)因子解释

fa2 = FactorAnalyzer(2, rotation="varimax")
fa2.fit(data2)
#fa2.loadings_
import seaborn as sns
df_cm = pd.DataFrame(np.array(fa2.loadings_), index=data2.columns)
plt.figure(figsize = (14,14))
ax = sns.heatmap(df_cm, annot=True, cmap="BuPu")
# 设置y轴的字体的大小
ax.yaxis.set_tick_params(labelsize=15)
plt.title('Factor Analysis', fontsize='xx-large')
# Set y-axis label
plt.ylabel('指标', fontsize='xx-large')
plt.savefig('factorAnalysis.png', dpi=500)

因子特征图
可以看到两个因子,因子一为城市总体水平相关,因子二为人均水平

(3)因子得分熵权值法

fa_result=fa2.transform(data2)
fa_df=pd.DataFrame(fa_result,columns=['因子1','因子2'])
fa_df['城市']=data['城市']
fa_df=fa_df[['城市','因子1','因子2']]
fa_df #查看各个城市因子得分情况
fa2.get_factor_variance() #三行分别为:特征值、方差贡献率、累计方差贡献率
w_fa = pd.DataFrame(fa2.get_factor_variance()[1]/fa2.get_factor_variance()[2][1]) #计算权重
w_fa.index = ['因子1','因子2']
w_fa.columns = ['weight']
print(w_fa)
print('运行完成!')

因子矩阵如下:

城市 因子1 因子2
0 深圳 0.722835 0.545153
1 北京 2.047106 1.528530
2 杭州 -0.021186 0.725561
3 上海 2.208202 0.748944
4 广州 0.971990 0.389431
5 宁波 -0.854949 1.059902
6 天津 0.522120 -0.582210
7 南京 -0.286080 0.073427
8 苏州 0.988533 -0.555511
9 大连 0.079789 -0.090425
10 珠海 -1.004297 -0.118019
11 台州 -0.831413 -0.778233
12 绍兴 -1.217225 0.628441
13 常州 -0.150640 -1.146801
14 南通 0.313035 -1.498721
15 无锡 -0.235692 -0.519464
16 嘉兴 0.692051 -2.635968
17 舟山 -0.723960 -0.537228
18 东莞 -2.636141 4.229337
19 湖州 -0.584076 -1.466145

特征值、方差贡献率、累计方差贡献率如下:
(array([4.92525528, 2.14625952]),
array([0.49252553, 0.21462595]),
array([0.49252553, 0.70715148]))

因子权重分别为:因子1:0.696492;因子2:0.303508。

#综合得分
score_fa=np.dot(fa_df.iloc[:,1:],w_fa)
score_fa=pd.DataFrame(score_fa)
score_fa.columns = ['因子分解-熵权值法得分']
score_fa['城市']=data['城市']
score_fa=score_fa[['城市','因子分解-熵权值法得分']]
score_fa.sort_values('因子分解-熵权值法得分',ascending=False) #因子得分排序
城市 因子分解-熵权值法得分
1 北京 0.857439
3 上海 0.846136
4 广州 0.652506
0 深圳 0.623568
8 苏州 0.613110
6 天津 0.544871
2 杭州 0.524573
9 大连 0.503017
16 嘉兴 0.478509
14 南通 0.474292
7 南京 0.457658
15 无锡 0.438691
13 常州 0.423186
5 宁波 0.419480
17 舟山 0.367706
12 绍兴 0.348320
19 湖州 0.346751
10 珠海 0.345933
11 台州 0.341602
18 东莞 0.303508

5.三种方法的比较

三种方法排名汇总

#score['熵权值法排名']=score['熵权值法得分'].rank(ascending=False)
score_fa['因子分解-熵权值法排名']=score_fa['因子分解-熵权值法得分'].rank(ascending=False)
score_pca['主成分分析-熵权值法排名']=score_pca['主成分分析-熵权值法得分'].rank(ascending=False)
result=score.merge(score_fa,how='left',on='城市')
result=result.merge(score_pca,how='left',on='城市')
result[['城市','熵权值法排名','主成分分析-熵权值法排名','因子分解-熵权值法排名']]
城市 熵权值法排名 主成分分析-熵权值法排名 因子分解-熵权值法排名
深圳 6.0 5.0 4.0
北京 2.0 2.0 1.0
杭州 8.0 7.0 7.0
上海 1.0 1.0 2.0
广州 3.0 3.0 3.0
宁波 10.0 9.0 14.0
天津 4.0 4.0 6.0
南京 7.0 8.0 11.0
苏州 5.0 6.0 5.0
大连 11.0 11.0 8.0
珠海 19.0 19.0 18.0
台州 16.0 16.0 19.0
绍兴 13.0 15.0 16.0
常州 14.0 13.0 13.0
南通 12.0 12.0 10.0
无锡 9.0 10.0 12.0
嘉兴 17.0 17.0 9.0
舟山 20.0 20.0 15.0
东莞 15.0 14.0 20.0
湖州 18.0 18.0 17.0

可以看到,三种方法排序略有差异,但也有共性:

  • 具有较高的投资潜力(三种方法投资潜力排名前5的城市有(并集)):上海、北京、广州、深圳、天津、苏州
  • 具有较差的投资潜力(三种方法投资潜力排名后5的城市有(并集)):东莞、舟山、湖州、嘉兴、珠海、台州、绍兴
  • 投资潜力中等(其余):杭州、宁波、南京、大连、常州、南通、无锡

查看投资潜力较弱的城市,归纳特征:

weak_city='东莞、舟山、湖州、嘉兴、珠海、台州、绍兴'.split('、')
trans_data[trans_data['城市'].isin(weak_city)] 
#trans_data为经过负向指标处理及归一化后的数据,各个均值都为1,均为越大越好
城市 GDP 人均可支配收入 城市化水平 户籍人口数量 商品房销售均价 商品房销售面积 人均使用面积 商品房施工面积 供求风险 购买力风险
珠海 0.222316 0.963882 0.917587 0.167766 0.869621 0.223202 0.998096 1.313413 1.034506 1.111000
台州 0.435225 1.038338 0.883602 1.022677 0.868702 0.324073 0.785967 1.243792 0.816806 1.181462
绍兴 0.497717 1.062883 0.883602 0.788751 0.827160 0.456687 0.987218 1.229236 1.054645 1.244216
嘉兴 0.397417 0.972446 0.803275 0.607637 0.790214 0.448576 0.805004 1.224467 1.015865 1.207275
舟山 0.098820 0.955919 0.803275 0.174920 0.790214 0.114546 1.074245 1.360495 1.151858 1.192179
东莞 0.778412 1.381105 1.004094 0.304833 0.770546 0.473444 0.448735 1.219795 1.039234 1.480923
湖州 0.225665 0.954719 0.818722 0.467074 0.759885 0.243554 0.943704 1.287424 0.866173 1.225195

因为三种方法来说GDP都是衡量投资潜力的重要指标,尽管这些城市商品房施工面积、供求风险、购买力风险都低于平均水平(负向指标经过逆向处理,看到的结果为越大越好,越大说明风险越低,且均值为1),但这些城市GDP较低,所以在三种方法中排序都靠后,不具有很强的投资潜力。


总结

本篇博客的主要是学习了指标排序,在无监督的情况下,如何进行排序,投资指导意义方面分析不强,20年完成的一次课程小作业。

猜你喜欢

转载自blog.csdn.net/jojojuejue/article/details/111026451