前几天写了 一组数据推算居民收入分布!被网友喷太简单了。今天来点难度,数据从一维升级到二维,并使用更高级的“多维标度”分析法来做数据的可视化。
我们从国家统计局下载了最近5年19个行业的单位数的二维表格:

1,先看数据的整体:
从总指标“法人单位数”的变化,可以看出 总体法人单位数在2019-2022年持续高速增长,但在2023年出现下降。
2022到2023年增长率:(35014905 - 37169634) / 37169634 ≈ -5.80%
2023年是行业整体的难过之年。
2,细看行业的变化:
18个行业的单位数 存在明显的大小分别,行业之间的对比没有意义。各行业的单位数的近5年的涨跌趋势与整体大盘一致。明显在2023年受挫下跌。
3,如何找到行业的老大难?
行业的大难需要用指标来定义,单位数来定义为“大”,2023的下跌幅度定义为“难”。找到两个核心的指标后,我们借助R工具使用多维标度分析找到行业大难的topn。
数据整理之后:提取行业名称和计算了2023年涨幅指标。

4, 用R进行多维标度分析
这里我们使用了R中的vegan包中的metaMDS方法,首先我们将数据转换成适合处理的矩阵:

并对单位数进行归一化处理,然后使用R开始分析:
df <- data.frame(hangye23d=行业数据
> matrix_from_df <- as.matrix(df)
> rownames(matrix_from_df) <- 行业数据$hange
> matrix_from_df
d<-dist(matrix_from_df)
fit2<-metaMDS(d,k=2)
stressplot(fit2)
d<-dist(matrix_from_df)
fit<-isoMDS(d,k=2)
dd <- fit$points
colnames(dd) <- c("x", "y")理想情况下,增加的排序距离等于增加的观测距离,所有的点都落在一条单调递增的线上,越一致越好,偏差大则结果差。Stress值就是下图回归线的残差。
当然很理想,因为只使用了两个核心变量。

对isoMDS的分析结果使用ggplot可视化
ggplot(dd, aes(x=x, y=y, label=rownames(dd)))
+geom_point(size=4,shape=as.factor(y)) + scale_size_area()
+geom_text_repel(family ="PingFang SC")
+geom_vline(xintercept = 0, linetype = "dashed", color = "red")
+geom_hline(yintercept = 0, linetype = "dashed", color = "blue")行业的老大难的结果一目了然:2023年的采矿业和金融业最难,规模最大的是批发和零售业且跌幅也较大。稳中向好的行业是 居民服务、修理和其他服务。
