数据可视化期末报告

Author

kaka

1 报告要求

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

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

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

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

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

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

  • 评分标准:

    • 每章节图形各20分

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

    • 数据独特性强10%

    • 图形个性化强15%

2 类别数据可视化

2.1 案例数据解释与展示

  • 数据来源:EPS DATA

  • 各变量的意义如下:

    年份:该变量表示统计就业人员数的具体年份,时间跨度从 2010 年到 2024 年,以年度为单位,用于展示不同时间阶段的就业情况变化。

    第一产业就业人员数(万人):记录在各年份中,从事第一产业(一般包括农业、林业、畜牧业、渔业等)的就业人员数量,单位为万人。通过该变量可以分析第一产业就业规模随时间的变化趋势。

    第二产业就业人员数(万人):反映各年份中,从事第二产业(通常涵盖工业、建筑业等)的就业人员数量,单位是万人。借助此变量能够了解第二产业就业人数的增减情况和发展态势。

    第三产业就业人员数(万人):体现各年份中,从事第三产业(像服务业、商业、金融业等)的就业人员数量,单位为万人。该变量有助于分析第三产业就业规模的演变以及其在整体就业结构中的地位变化。

# 加载必要的包
library(ggiraphExtra)
library(ggplot2)
library(gridExtra)
library(dplyr)
library(tidyr)
library(DT)

# 读取数据
data <- read.csv("中国产业就业结构-年度(全国).csv",fileEncoding = "GB18030")
datatable(data,rownames = F)

2.2 图形1——饼环图

# 选择最新年份的数据(2024年)
latest_data <- data %>% 
  filter(年份 == max(年份)) %>% 
  select(-年份) %>% 
  pivot_longer(cols = everything(), names_to = "产业", values_to = "就业人数")

# 清理产业名称
latest_data$产业 <- gsub("就业人员数(万人)", "", latest_data$产业)
latest_data$产业 <- gsub("第一产业", "农业", latest_data$产业)
latest_data$产业 <- gsub("第二产业", "工业", latest_data$产业)
latest_data$产业 <- gsub("第三产业", "服务业", latest_data$产业)

# 创建饼环图
p1 <- ggPieDonut(data = latest_data, 
                 aes(pies = 产业, donuts = 产业, count = 就业人数),
                 title = paste0("(", letters[1], ") 2024年中国产业就业结构"))

# 显示图形
p1

  • 图形解读:服务业就业占比最高(推测对应 48.8% ),说明 2024 年服务业已成为吸纳就业的绝对主力,反映我国经济发展中,消费升级、数字化等推动服务业繁荣,创造大量就业岗位,就业结构向服务化深度转型 。
  • 农业和工业就业占比推测均为 22.2%、29% 左右(需修正标注后精准判断 ),农业仍保持一定就业规模,体现其基础地位;工业就业占比稳定,说明工业作为实体经济重要部分,对就业支撑持续,不过与服务业占比拉开差距,产业就业结构随经济发展进一步分化 。

3 数据分布可视化

3.1 案例数据解释与展示

# 加载必要的包
library(tidyverse)
library(ggbeeswarm)  # 蜂群图所需
library(gridExtra)   # 多图排列
library(DT)
data2 <- read_csv(
  "F:/数据可视化/中国产业就业结构-年度(全国).csv",
  col_types = cols(
    年份 = col_integer(),
    `第一产业就业人员数(万人)` = col_double(),
    `第二产业就业人员数(万人)` = col_double(),
    `第三产业就业人员数(万人)` = col_double()
  ),
  locale = locale(encoding = "GB18030")
) %>%
  rename(
    "第一产业" = "第一产业就业人员数(万人)",
    "第二产业" = "第二产业就业人员数(万人)",
    "第三产业" = "第三产业就业人员数(万人)"
  ) %>%
  pivot_longer(
    cols = -年份,
    names_to = "产业类型",
    values_to = "就业人数"
  ) %>%
  group_by(产业类型) %>%
  mutate(
    标准化值 = as.numeric(scale(就业人数)),  # 确保输出为数值型
    产业类型 = factor(产业类型, levels = c("第一产业", "第二产业", "第三产业"))
  ) %>%
  ungroup()
# 3. 可视化主题设置 --------------------------------------------------------
mytheme <- theme_minimal() +
  theme(
    legend.position = "none",
    plot.title = element_text(hjust = 0.5, size = 11, face = "bold"),
    axis.title = element_text(size = 9),
    axis.text = element_text(size = 8),
    panel.grid.minor = element_blank()
  )
color_palette <- c("#1f77b4", "#ff7f0e", "#2ca02c")  # 使用Matplotlib默认配色
datatable(data2 ,rownames = FALSE)

3.2 图形2——箱线图➕蜂群图

# 4. 创建蜂群图 ----------------------------------------------------------
create_plot <- function(add_boxplot = FALSE) {
  p <- ggplot(data2, aes(x = 产业类型, y = 标准化值)) +
    geom_beeswarm(
      priority = "density",
      cex = 1.8,
      shape = 21,
      size = 2.5,
      stroke = 0.3,
      aes(fill = 产业类型),
      color = "white"
    ) +
    scale_fill_manual(values = color_palette) +
    labs(
      x = NULL,
      y = "标准化就业人数",
      title = ifelse(add_boxplot,
        "三大产业就业分布(箱线图+蜂群图)",
        "三大产业就业分布(蜂群图)"
      )
    ) +
    mytheme
  
  if (add_boxplot) {
    p <- p + geom_boxplot(
      width = 0.15,
      outlier.shape = NA,
      aes(color = 产业类型),
      alpha = 0,
      size = 0.6
    ) +
      scale_color_manual(values = color_palette)
  }
  return(p)
}

# 5. 生成并组合图形 ------------------------------------------------------
p1 <- create_plot(add_boxplot = FALSE)
p2 <- create_plot(add_boxplot = TRUE)

# 使用grid.text替代textGrob(更兼容的写法)
final_plot <- grid.arrange(
  p1, p2,
  ncol = 2,
  top = grid::textGrob("中国三大产业就业人员分布分析 (2010-2024)", 
                      gp = grid::gpar(fontsize = 14, fontface = "bold"))
)

  • 图形解读:从图中可以看出,第一产业(蓝色)标准化就业人数离散程度高(蜂群图点分布广、箱线图 whisker 长 ),说明就业人数年际波动大;第三产业(绿色)离散程度低,就业规模相对稳定,产业吸纳就业的稳定性更好 。
  • 第二产业(橙色)标准化就业人数集中趋势明显(蜂群图点相对聚集、箱线图箱体紧凑 ),反映其就业规模在年际间有较为一致的水平;对比来看,第一产业就业人数均值受极端值影响,第三产业因离散度低,集中趋势更能体现常规就业规模 。

4 变量关系可视化

4.1 案例数据解释与展示

library(ggplot2)
data3 <- read.csv("F:/数据可视化/中国产业就业结构-年度(全国).csv", 
                 fileEncoding = "GB18030")
# 检查数据
head(data3)
  年份 第一产业就业人员数.万人. 第二产业就业人员数.万人.
1 2010                    27931                    21842
2 2011                    26472                    22539
3 2012                    25535                    23226
4 2013                    23838                    23142
5 2014                    22372                    23057
6 2015                    21418                    22644
  第三产业就业人员数.万人.
1                    26332
2                    27185
3                    27493
4                    29321
5                    30920
6                    32258
# 重命名列名
colnames(data3) <- c("年份", "第一产业", "第二产业", "第三产业")
datatable(data3 ,rownames = FALSE)

4.2 图形3——气泡图

# 绘制气泡图
ggplot(data3, aes(x = 年份, y = 第一产业, 
                 size = 第三产业,
                 color = 第二产业)) +
  geom_point(alpha = 0.7) +
  scale_size(range = c(3, 10), name = "第三产业(万人)") +
  scale_color_gradient(low = "blue", high = "red", name = "第二产业(万人)") +
  labs(title = "中国三大产业就业结构变化(2010-2024)",
       x = "年份",
       y = "第一产业就业人数(万人)") +
  theme_minimal()

  • 图形解读:图中2010 - 2024 年中国第一产业就业人数与第三产业就业人数关联的散点图(含颜色、大小映射 ),解读如下:
    • 第一产业就业趋势:第一产业就业人数(纵轴 )随年份(横轴 )推进持续下降,说明农业现代化、产业结构升级等,使大量劳动力从第一产业转出,传统农业吸纳就业能力弱化,就业结构向非农产业加速调整 。

    • 第三产业就业关联:散点颜色(关联第三产业人数,色阶从蓝到红 )和大小(也关联第三产业人数 )随年份变化,呈现第三产业就业人数不断增长,且与第一产业就业人数下降形成互补,反映经济发展中,第三产业成为吸纳第一产业转出劳动力的主要领域,成为就业增长新引擎,产业协同带动就业结构优化 。

5 样本相似性可视化

5.1 案例数据解释与展示

library(ggiraphExtra)
library(ggplot2)
library(dplyr)
library(tidyr)
library(readr)
library(gridExtra)
library(ggplot2)
library(dplyr)
data4 <- read_csv("F:/数据可视化/中国产业就业结构-年度(全国).csv", 
                 locale = locale(encoding = "GB18030")) %>%
  rename(
    "第一产业" = "第一产业就业人员数(万人)",
    "第二产业" = "第二产业就业人员数(万人)",
    "第三产业" = "第三产业就业人员数(万人)"
  ) %>%
  # 选择关键年份并标准化数据
  filter(年份 %in% c(2010, 2015, 2020, 2024)) %>%
  mutate(年份 = paste0(年份, "年")) %>%
  # 数据标准化(雷达图必需步骤)
  mutate(across(c(第一产业, 第二产业, 第三产业), 
                ~ scales::rescale(., to = c(0, 1)))) 
datatable(data4,rownames = FALSE)

5.2 图形4——雷达图

# 绘制雷达图
p1 <- ggRadar(
  data = data4,  # 使用预处理后的数据
  mapping = aes(group = 年份),  # 按年份分组
  values.radar = c("0%", "50%", "100%"),  # 径向刻度标签
  axis.labels = c("农业", "工业", "服务业"),  # 轴标签
  grid.min = 0,  # 最小值
  grid.mid = 0.5,  # 中间值
  grid.max = 1,  # 最大值
  group.colours = rainbow(nrow(data4)),  # 使用彩虹色系区分年份
  background.circle.colour = "white",
  plot.title = "中国三大产业就业结构变化(2010-2024,标准化)"
) +
  theme(
    plot.title = element_text(hjust = 0.5, size = 14, face = "bold"),
    legend.title = element_blank(),
    legend.position = "bottom",
    legend.text = element_text(size = 8)
  )

# 显示图形
print(p1)

  • 图形解读:上图展现的是中国三大产业就业结构变化的标准化雷达图,展示了 2010、2015、2020、2024 年的就业结构。
  • 从图中可知,2010 年(红色)第一产业占比突出,随时间推移,第三产业(紫色)占比持续提升,到 2024 年成为占比最大的产业,第一产业占比明显收缩,体现我国就业结构从农业主导,逐步向服务业(第三产业)引领转型,产业结构优化升级路径清晰 。
  • 产业发展重心转移:第二产业(绿色、青色等)占比相对稳定但有小幅波动,第三产业占比逐步超越第一、二产业,说明就业重心向第三产业转移,反映出经济发展中服务业对就业的吸纳能力不断增强,成为就业增长的核心驱动力,也契合消费升级、数字化经济等推动服务业繁荣的大趋势 。

6 时间序列可视化

6.1 案例数据解释与展示

library(tidyverse)
library(plotrix)  # 用于绘制风筝图
#  数据读取与预处理
data5 <- read_csv(
  "F:/数据可视化/中国产业就业结构-年度(全国).csv",
  locale = locale(encoding = "GB18030"),
  show_col_types = FALSE  # 隐藏列类型提示
) %>%
  rename(
    "第一产业" = "第一产业就业人员数(万人)",
    "第二产业" = "第二产业就业人员数(万人)",
    "第三产业" = "第三产业就业人员数(万人)"
  ) %>%
  mutate(
    年份 = as.character(年份),  # 转为字符型便于标签显示
    就业总量 = 第一产业 + 第二产业 + 第三产业
  )
# 转换为风筝图所需矩阵格式
emp_matrix <- as.matrix(data5[, c("第一产业", "第二产业", "第三产业")])
rownames(emp_matrix) <- data5$年份
datatable(data5,rownames = FALSE)

6.2 图形5——风筝图

# 绘制原始数据风筝图
kiteChart(
  t(emp_matrix),
  varscale = FALSE,
  main = "中国三大产业就业人数(原始数据)",
  xlab = "年份",
  ylab = "就业人数(万人)",
  col = c("#E41A1C", "#377EB8", "#4DAF4A"),
  lty = 1:3,
  lwd = 2
)

#绘制归一化数据风筝图
kiteChart(
  t(emp_matrix),
  timex = TRUE,
  normalize = TRUE,
  shownorm = FALSE,
  main = "中国三大产业就业结构(归一化)",
  xlab = "年份",
  ylab = "相对比例",
  col = c("#E41A1C", "#377EB8", "#4DAF4A"),
  lty = 1:3,
  lwd = 2
)

#添加图例
legend("topright",
       legend = c("第一产业", "第二产业", "第三产业"),
       col = c("#E41A1C", "#377EB8", "#4DAF4A"),
       lty = 1:3,
       lwd = 2,
       title = "产业类型",
       cex = 0.8,
       bty = "n")

  • 图形解读:从风筝图可以看出第三产业(绿色)就业规模最大,是吸纳就业的主体;第二产业(蓝色)、第一产业(红色)规模相对小,反映产业就业结构差异。这两个图共同解释了中国的产业结构调整已进入”服务业主导+制造业精耕”的新阶段,需要:
    1. 建立服务业就业质量评估体系(避免”数量增长但质量停滞”)

    2. 在第二产业实施”技能密度提升计划”(应对规模萎缩但价值提升的矛盾)

    3. 关注第一产业转移人口的”再技能化”窗口期(2010-2024年已累计转移1.1亿劳动力)