数据可视化期末报告

Author

kaka

1 报告要求

  • 期末实验报告由5章节5个图形组成,每个章节需要作一个图形。

  • 每个章节选择作什么图自主选择,作图前补充完整图形标题名称,例如:图形1——多变量条形图。

  • 案例数据自主收集,不同章节可以公用一个数据集。但同学间不允许使用相同数据集。

  • 每个章节的数据集合需要通过datatable 函数展示,并简要解释数据来源和变量意义。

  • 每个输出图形后需要对图形作简要解读,最少需针对图形提出一个观点。

  • 渲染html文件保留代码展示,6月22日前将发布网址提交至共享文档“8、期末报告” 列中。

  • 评分标准:

    • 每章节图形各20分

    • 能有效输出图形和合理解释75%

    • 数据独特性强10%

    • 图形个性化强15%

2 类别数据可视化

2.1 案例数据解释与展示

本图所使用的数据来源于国家统计局发布的各年度居民人均消费支出统计数据。原始数据涵盖中国大陆31个省级行政单位,按年度分别统计城乡居民在各类消费项目上的支出情况。为实现可视化分析与区域结构比较,本研究在整理基础数据的同时,补充了每个地区对应的区域划分(如华东、华北、西南等)以及国家划分的三大地带(即东部地带、中部地带、西部地带)。

在数据处理过程中,选取了若干关键变量构建层级结构。其中,“地带”、“区域”、“范围”(即城镇或农村)、“地区”(省级单位名称)四个变量被用于旭日图的层次分类列,而“总支出”则作为数值变量,用于反映各层级人群的年度人均消费水平。

library(readxl)
library(DT)
data <- read_xlsx("合并后的消费数据.xlsx")
library(dplyr)
data <- data %>%
  rename(
    年份 = `年度标识`,
    地区 = `地区名称`,
    范围 = `统计范围(2为城镇、3为农村)`,
    总支出 = `居民人均消费支出/元`,
    食品烟酒 = `居民人均消费支出-食品烟酒/元`,
    衣着 = `居民人均消费支出-衣着/元`,
    居住 = `居民人均消费支出-居住/元`,
    生活用品服务 = `居民人均消费支出-生活用品及服务/元`,
    交通通信 = `居民人均消费支出-交通通信/元`,
    教育文化娱乐 = `居民人均消费支出-教育文化娱乐/元`,
    医疗保健 = `居民人均消费支出-医疗保健/元`,
    其他用品服务 = `居民人均消费支出-其他用品及服务/元`,
    区域 = `区域划分`,
    地带 = `三大地带`
  )
data <- data %>%
  mutate(
    范围 = case_when(
      范围 == 2 ~ "城镇",
      范围 == 3 ~ "农村",
      TRUE ~ as.character(范围)
    )
  )
data_subset <- data %>%
  select(年份, 地区, 范围, 区域, 地带, 总支出)

datatable(data_subset, options = list(pageLength = 10), 
          caption = "表:各地区各类分类变量与人均总消费支出")

2.2 图形1——旭日图

library(d3r)
library(sunburstR)
df_tree <- d3_nest(data_subset %>%
                     select(地带, 区域, 范围, 地区, 总支出),
                   value_cols = "总支出")
sunburst(data = df_tree,
         valueField = "总支出",
         count = TRUE,
         sumNodes = TRUE,
         colors = htmlwidgets::JS("d3.scaleOrdinal(d3.schemeCategory20c)"),  # 使用 D3 颜色方案
         withD3 = TRUE)
Legend
  • 图形解读:

图通过交互式旭日图的形式,展示了居民人均消费总支出在多个地理层级下的分布结构。图形采用“地带 → 区域 → 城乡范围 → 地区”四个分类变量作为层级列,从内到外依次嵌套,构成完整的路径结构。用户可通过点击扇形节点,逐层展开下一级分类,实现从宏观地理区划到具体省市的消费结构洞察。

图形中央动态显示当前路径所对应的消费总额(例如“2.7M”表示累计消费为270万)以及该路径占全国总支出的百分比(如“14.4%”)。由于图形具备交互功能,用户每次点击的路径不同,所呈现的数值结果也随之更新,因此该图并不展示静态的单一结果,而是提供了一个多层级、多维度、可自由探索的消费结构视图。

例如,用户可通过点击“东部地带–华东–城镇”,观察到该路径下居民消费占全国的比例约为14.4%;若进一步选择“上海市”节点,则可看到上海城镇居民占全国消费的约0.151%。而在选择“东部地带–华东–农村”路径时,占比则降至约7.16%,显示出区域内部城乡消费能力的显著差异。

该图形揭示了我国不同地带、区域、城乡群体之间在消费水平上的结构性差异。其中,东部地带、华东区域和城镇居民普遍表现出较高的消费支出水平,而农村居民的相对占比则显著偏低。通过此图,不仅可清晰辨识出高消费区域的集中分布,还能为政策制定者提供可视化依据,助力于推动消费均衡与区域协调发展。

3 数据分布可视化

3.1 案例数据解释与展示

本部分数据来自国家统计局发布的各年度居民人均消费支出数据,涵盖中国大陆31个省级行政单位在不同年份的城乡居民消费结构。原始数据中包含居民在多个消费类别上的具体支出金额(单位:元),包括食品烟酒、衣着、居住、交通通信、教育文化娱乐、医疗保健、生活用品服务、其他用品服务等八项。

在本图形分析中,我们剔除了“总支出”及非消费变量,仅保留上述八类具体消费支出指标,并将其转换为长格式数据。为了便于比较不同消费类别的分布特征,我们进一步对每类消费金额进行了标准化处理。下表展示了转换后的数据结构,包括“消费类别”、“消费金额”与其对应的“标准化金额”变量。

library(ggridges)
library(plyr)
library(tidyr)
library(RColorBrewer)
library(ggplot2)
library(gridExtra)
mytheme <- theme(
  plot.title = element_text(size = 11),
  axis.title = element_text(size = 10),
  axis.text = element_text(size = 9),
  legend.position = "right",
  legend.text = element_text(size = 8)
)
df <- data %>%
  select(-c(年份, 地区, 范围, 总支出, 区域, 地带)) %>%
  gather(key = "消费类别", value = "消费金额") %>%
  ddply("消费类别", transform, 标准化金额 = scale(消费金额))
datatable(df,
          options = list(pageLength = 10),
          caption = "表:各类消费支出原始值与标准化值(长格式)")

3.2 图形2——核密度山峦图

# 设置调色板
palette <- rev(brewer.pal(11, "Spectral"))

# (a) 原始消费金额山峦图
p1 <- ggplot(df, aes(x = 消费金额, y = 消费类别, fill = ..density..)) +
  geom_density_ridges_gradient(scale = 3, rel_min_height = 0.01) +
  scale_x_continuous(expand = c(0.01, 0)) +
  scale_y_discrete(expand = c(0.01, 0)) +
  scale_fill_gradientn(colors = palette) +
  mytheme +
  theme(legend.position = "bottom") +
  labs(title = "(a) 各类消费原始金额分布山峦图", x = "消费金额(元)", y = NULL)

# (b) 标准化消费金额山峦图
p2 <- ggplot(df, aes(x = 标准化金额, y = 消费类别, fill = ..density..)) +
  geom_density_ridges_gradient(scale = 1.5, rel_min_height = 0.01) +
  scale_x_continuous(expand = c(0.01, 0)) +
  scale_y_discrete(expand = c(0.01, 0)) +
  scale_fill_gradientn(colors = palette) +
  mytheme +
  theme(legend.position = "bottom") +
  labs(title = "(b) 各类消费标准化分布山峦图", x = "标准化消费金额", y = NULL)

# 并排显示图形
grid.arrange(p1, p2, ncol = 2)

  • 图形解读:

在图 (a) 中,横轴表示消费金额(单位为元),纵轴为不同消费类别。从图中可以观察到,食品烟酒、衣着、生活用品服务和其他用品服务类的消费金额大多数集中在低值区间,右侧存在一定程度的长尾,表明部分地区或年份存在高消费水平,造成整体偏态分布。相比之下,居住与教育文化娱乐类消费的分布更为宽散,表明此类开支在城乡、地区之间存在较大差异。

图 (b) 对原始消费金额进行了标准化处理(Z-score),消除了单位和数量级差异,使不同消费类别之间的分布特征更具可比性。从标准化分布图可见,其他用品服务的密度峰值最为集中,表明该类别在多数样本中波动较小、消费结构较为一致。而居住、教育文化娱乐、医疗保健等类别的标准化分布曲线相对平缓,显示出更大的样本间差异性,可能受到地区发展水平或政策支持力度的影响。

4 变量关系可视化

4.1 案例数据解释与展示

  • 本数据集来源于Wind,包含了央视50成分股的多个财务指标,用于评估公司财务健康和市场表现。 现价:股票当前交易价格,反映市场对公司估值。市盈率:公司市值与每股盈利的比率,衡量公司估值水平。净利润:公司扣除所有费用后的净利润,反映盈利能力。 收入同比:公司收入与去年同一时期的增长率。利润同比:公司净利润与去年同一时期的增长率。股息率:公司每股股息与股价的比率,反映股东回报。
data2 <- read.csv("央视50成分股数据.csv")
data_selected <- data2 %>%
  select(现价, 市盈.TTM., 净利润.亿., 收入同比., 利润同比., 股息率.)
colnames(data_selected) <- c("现价", "市盈率", "净利润", "收入同比", "利润同比", "股息率")
# 使用datatable展示数据
library(DT)
datatable(data_selected, 
          options = list(pageLength = 10), 
          caption = "表:央视50成分股财务数据")

4.2 图形3—— 散点图矩阵和相关系数矩阵

library(GGally)
ggpairs(data_selected, 
        upper = list(continuous = "cor"),      # 上三角:显示相关系数
        lower = list(continuous = "points"),   # 下三角:显示散点图
        diag = list(continuous = "densityDiag") # 对角线:显示核密度图
) + 
  theme(axis.title = element_text(size = 8)) +       
  theme(axis.text = element_text(size = 6)) 

  • 图形解读:

通过散点图矩阵,我们可以观察到各个财务指标之间的分布与关系。例如,现价与市盈率之间的相关系数为 -0.033,显示两者之间几乎没有显著的线性关系。而收入同比与股息率之间的相关系数为 0.576,表明两者有中等偏强的正相关关系,并且这种关系在统计上是显著的(通过星号表示)。此外,净利润与利润同比的相关系数为 -0.179,表明它们之间存在轻微的负相关关系。

图中的对角线部分展示了每个变量的核密度图,用于查看各个变量的分布。例如,市盈率的分布显示出明显的偏态,说明大部分公司市盈率较低,而少数公司的市盈率非常高。

某些变量的相关系数后带有星号,表示这些相关性在统计上是显著的。比如,股息率与净利润的相关系数为 -0.331,表明两者之间有显著的负相关关系。这些信息可以为财务分析和投资决策提供有价值的参考。

5 样本相似性可视化

5.1 案例数据解释与展示

本部分数据和图片2使用的是同一套数据,在数据处理时候对各地区 × 范围 聚合均值

vars <- c("食品烟酒", "衣着", "居住", "生活用品服务",
          "交通通信", "教育文化娱乐", "医疗保健")
cluster_input <- data %>%
  group_by(地区, 范围) %>%
  summarise_at(vars(vars), mean, na.rm = TRUE) %>%
  ungroup()
datatable(cluster_input,
          caption = "表:地区 × 范围的消费均值汇总",
          options = list(pageLength = 10, autoWidth = TRUE))

5.2 图形4——K-menas聚类主成分图

numeric_data <- cluster_input %>%
  select(all_of(vars)) %>%
  scale()
row_labels <- paste(cluster_input$地区, cluster_input$范围, sep = "_")
rownames(numeric_data) <- make.unique(row_labels)
set.seed(123)
kmeans_result <- kmeans(numeric_data, centers = 4, nstart = 25)
library(factoextra)
library(ggrepel)
fviz_cluster(kmeans_result,
             data = numeric_data,
             labelsize = 0,
             geom = "point",
             ellipse.type = "convex",
             repel = TRUE,
             ggtheme = theme_minimal(),
             main = "K-means 聚类结果(基于消费结构)") +
  geom_text_repel(aes(label = rownames(numeric_data)), size = 3)

  • 图形解读:

第一类聚类(红色圆形)主要由各省“农村”地区组成,如云南、贵州、黑龙江、安徽等省的农村地区。该类聚类特征集中于基础性消费支出,食品烟酒、生活用品服务等刚性支出占比较高,而交通通信、教育文化娱乐等可选性支出占比相对较低,反映出该类群体以满足基本生活需求为主的消费模式。这类群体在第一主成分轴上整体处于正向,显示其消费结构在整体维度上与其他类有明显差异。

其次,第二类聚类(绿色三角形)呈现城乡混合特征,包含如江苏、浙江、上海等发达省份的“农村”以及中西部省份的“城镇”地区。这类群体的消费结构较为均衡,在基础生活支出和发展性消费之间呈现一定协调性,可能代表着城乡融合和经济转型过程中的中间状态。

第三类聚类(蓝色正方形)集中于大多数经济发展程度较高的“城镇”地区,如江苏、广东、福建、湖南等省的城市居民。该类群体的消费结构更偏向于多元化发展,在教育文化、交通通信等支出上占比较高,体现出较高的城市消费能力和结构复杂性。这类群体在第一主成分维度上偏负方向,表明其与农村地区存在显著差异。

最后,第四类聚类(紫色十字形)由北京、上海、浙江等高消费水平城市的“城镇”组成,形成独立一类。其在主成分空间中远离其他类群,说明其消费结构具有高度异质性。这一类群体在居住、教育、交通等方面的消费支出显著高于全国平均水平,是典型的高消费城市类群体,反映了我国一线城市在消费结构上的独特性与前沿性。

6 时间序列可视化

6.1 案例数据解释与展示

选取了全国居民消费支出数据作为案例,着重分析北京市城乡居民在不同消费类别上的支出变化情况。该数据涵盖自 1995 年以来的年度统计,记录了各地区在“城镇”和“农村”两类群体下的八项主要消费支出类别,包括食品烟酒、衣着、居住、生活用品服务、交通通信、教育文化娱乐、医疗保健及其他用品服务等。

library(ggplot2)
library(gganimate)
library(dplyr)
library(tidyr)
bj_data <- data %>%
  filter(地区 == "北京市") %>%
  select(年份, 范围, `食品烟酒`, 衣着, 居住, 生活用品服务,
         交通通信, 教育文化娱乐, 医疗保健, 其他用品服务)
bj_long <- bj_data %>%
  pivot_longer(cols = -c(年份, 范围),
               names_to = "消费类别",
               values_to = "支出")
datatable(bj_long,
          options = list(pageLength = 10, autoWidth = TRUE),
          rownames = FALSE,
          caption = "表:北京市各类消费支出")

6.2 图形5——时间序列折现图

p <- ggplot(bj_long, aes(x = 年份, y = 支出, color = 消费类别)) +
  geom_line(size = 1.2) +
  facet_wrap(~范围, nrow = 1) + 
  scale_x_continuous(breaks = seq(min(bj_long$年份), max(bj_long$年份), by = 2)) + 
  labs(title = "北京市各类消费支出随时间变化", y = "支出(元)", x = "年份") +
  theme_minimal(base_size = 14) +
  theme(
    legend.position = "right",
    axis.text.x = element_text(angle = 45, hjust = 1),
    plot.margin = margin(10, 20, 10, 20), 
    strip.text = element_text(size = 14)
  ) +
  transition_reveal(年份)
p

  • 图形解读:

图中展示了1995年至2020年北京市城乡居民在八类主要消费支出上的变化趋势,按“城镇”与“农村”分面绘制,反映出明显的消费升级和城乡差异。

整体来看,各类支出均呈上升趋势,尤其是“居住”类支出在城镇居民中增长最为显著,自2010年后快速上升,成为占比最高的类别,显示出住房支出在家庭预算中的重要性持续增强。农村居民的“居住”支出也稳步上升,反映出基础设施改善和住房条件提升的成效。

“交通通信”“教育文化娱乐”“医疗保健”等发展型支出亦持续增长,表明消费结构逐步从基本型向发展型转变。同时,“食品烟酒”类支出虽有增长,但相对稳定,说明其在总消费中的比重下降,体现出生活质量的提升。

城乡差异依然存在,城镇居民在大多数类别中的支出水平普遍高于农村居民,但后者增速较快,呈现出逐步缩小的趋势。