library(tidyverse)
library(readxl)
# 读取Excel数据(跳过前4行标题行)
raw_data <- read_excel("全国人均收入支出.xlsx", skip = 4)
# 清洗列名并筛选有效数据
colnames(raw_data) <- c("item", "item_en", "2017", "2018", "2019", "2020", "2021", "2022", "2023")
data_clean <- raw_data %>%
filter(!is.na(`2017`)) %>%
mutate(category = case_when(
str_detect(item, "可支配收入|现金可支配收入") ~ "income",
str_detect(item, "消费支出|现金消费支出") ~ "expense",
TRUE ~ "sub_item"
))
# 转换为长格式
long_data <- data_clean %>%
pivot_longer(cols = `2017`:`2023`, names_to = "year", values_to = "value") %>%
mutate(year = as.numeric(year))
df <- long_data
DT::datatable(df)数据可视化期末报告
1 报告要求
期末实验报告由5章节5个图形组成,每个章节需要作一个图形。
每个章节选择作什么图自主选择,作图前补充完整图形标题名称,例如:图形1——多变量条形图。
案例数据自主收集,不同章节可以公用一个数据集。但同学间不允许使用相同数据集。
每个章节的数据集合需要通过
datatable函数展示,并简要解释数据来源和变量意义。每个输出图形后需要对图形作简要解读,最少需针对图形提出一个观点。
渲染html文件保留代码展示,6月22日前将发布网址提交至共享文档
“8、期末报告”列中。评分标准:
每章节图形各20分
能有效输出图形和合理解释75%
数据独特性强10%
图形个性化强15%
2 类别数据可视化
2.1 案例数据解释与展示
2.1.1 一、数据来源与结构
2.1.1.1 1. 数据来源
原始文件:国家统计局年度统计公报或《中国统计年鉴》
统计范围:全国抽样调查(约16万户城乡居民家庭)
单位:元/人/年(按家庭人口平均)
2.1.1.2 2. 表格结构解析
指标层级 英文对应 经济学含义 可支配收入 Disposable Income 实际可用于消费和储蓄的收入 现金可支配收入 Disposable Income in Cash 剔除实物福利后的现金收入 消费支出 Consumption Expenditure 日常商品服务消费总额 服务性消费 Consumption on Services 教育医疗等无形消费支出 2.1.2 二、核心指标解释
2.1.2.1 1. 收入类指标
指标 组成说明 典型影响因素 工资性收入 受雇于单位或个人获得的劳动报酬 就业率/最低工资标准/行业薪酬 经营净收入 个体经营收入扣除成本后的净值(含农业经营) 个体工商户数量/农产品价格 财产净收入 利息/租金/专利收入等资产性收益 房价/存款利率/投资渠道 转移净收入 养老金/社会救济等再分配收入扣除税费后的净值 社保覆盖率/财政转移支付力度 2.1.2.2 2. 支出类指标
支出项目 包含内容示例 消费升级特征 食品烟酒 粮油/餐饮/烟草消费 恩格尔系数计算基础 居住 房租/水电/物业费(不含购房支出) 反映基本生活成本压力 教育文化娱乐 课外培训/旅游/电子产品 服务性消费升级典型领域 医疗保健 药品/医疗服务/健康管理 人口老龄化影响显著
2.2 图形1——堆叠面积图
library(tidyverse)
library(readxl)
# 1. 读取并预处理数据
raw_data <- read_excel("全国人均收入支出.xlsx", skip = 4)
colnames(raw_data) <- c("item", "item_en", "2017", "2018", "2019", "2020", "2021", "2022", "2023")
# 2. 清洗数据并转换为长格式
long_data <- raw_data %>%
filter(!is.na(`2017`)) %>%
mutate(across(`2017`:`2023`, as.numeric)) %>% # 确保所有年份列是数值型
pivot_longer(cols = `2017`:`2023`, names_to = "year", values_to = "amount") %>%
mutate(year = as.numeric(year))
# 3. 精确分类收入类型
income_data <- long_data %>%
filter(
str_detect(item, "^[1-4]\\.") | # 匹配1. 2. 3. 4.开头的行
str_detect(item, "工资性收入|经营净收入|财产净收入|转移净收入$")
) %>%
mutate(
income_type = case_when(
str_detect(item, "1\\.|工资性收入") ~ "工资性收入",
str_detect(item, "2\\.|经营净收入") ~ "经营净收入",
str_detect(item, "3\\.|财产净收入") ~ "财产净收入",
str_detect(item, "4\\.|转移净收入") ~ "转移净收入",
TRUE ~ NA_character_
)
) %>%
filter(!is.na(income_type)) %>%
filter(!is.na(amount)) # 移除NA值
# 4. 检查数据
print(distinct(income_data, item, income_type))# A tibble: 8 × 2
item income_type
<chr> <chr>
1 1.工资性收入 工资性收入
2 2.经营净收入 经营净收入
3 3.财产净收入 财产净收入
4 4.转移净收入 转移净收入
5 1.食品烟酒 工资性收入
6 2.衣着 经营净收入
7 3.居住 财产净收入
8 4.生活用品及服务 转移净收入
print(head(income_data))# A tibble: 6 × 5
item item_en year amount income_type
<chr> <chr> <dbl> <dbl> <chr>
1 1.工资性收入 1.Income of Wages and Salaries 2017 14620 工资性收入
2 1.工资性收入 1.Income of Wages and Salaries 2018 15829 工资性收入
3 1.工资性收入 1.Income of Wages and Salaries 2019 17186 工资性收入
4 1.工资性收入 1.Income of Wages and Salaries 2020 17917 工资性收入
5 1.工资性收入 1.Income of Wages and Salaries 2021 19629 工资性收入
6 1.工资性收入 1.Income of Wages and Salaries 2022 20590 工资性收入
# 5. 绘制堆叠面积图
ggplot(income_data, aes(x = year, y = amount, fill = income_type)) +
geom_area(position = "stack", alpha = 0.8, color = "white", size = 0.3) +
scale_fill_brewer(
palette = "Set2",
name = "收入类型",
labels = c("工资性收入", "经营净收入", "财产净收入", "转移净收入")
) +
scale_x_continuous(breaks = seq(2017, 2023, by = 1)) +
labs(
title = "全国居民可支配收入结构演变(2017-2023)",
x = "年份",
y = "金额(元)",
fill = "收入类型"
) +
theme_minimal() +
theme(
legend.position = "top",
plot.title = element_text(hjust = 0.5, size = 14, face = "bold"),
axis.text.x = element_text(angle = 45, hjust = 1),
panel.grid.minor = element_blank()
)- 图形解读:
2.2.1 收入结构总体趋势
持续增长:四大类收入均呈现稳定增长趋势
2020年增速放缓:受疫情影响明显
2021年后恢复增长:经济复苏态势良好
2.2.2 各收入类型分析
工资性收入(蓝色):
始终占据主导地位(占比约55-60%)
从2017年14,620元增长至2023年22,053元,年均增长率7.1%
经营净收入(橙色):
占比约15-20%
从2017年4,502元增长至2023年6,542元,年均增长率6.4%
2020年受冲击最明显(仅增长1.1%)
财产净收入(绿色):
占比最小(约7-9%)
从2017年2,107元增长至2023年3,362元,年均增长率8.1%
增速最快但波动较大
转移净收入(粉色):
占比约18-20%
从2017年4,744元增长至2023年7,261元,年均增长率7.4%
社会保障和转移支付效果显著
2.2.3 结构变化特征
稳定性:四类收入占比结构保持相对稳定
韧性差异:工资性收入抗风险能力最强,经营收入最易受冲击
政策效果:转移净收入持续稳定增长,反映社会保障体系完善
2.2.4 建议
加强职业技能培训,巩固工资性收入基础
优化营商环境,提升经营收入韧性
拓宽财产性收入渠道
完善社会保障和转移支付体系
3 数据分布可视化
3.1 案例数据解释与展示
library(tidyverse)
library(readxl)
# 读取Excel数据(跳过前4行标题行)
raw_data <- read_excel("全国人均收入支出.xlsx", skip = 4)
# 清洗列名并筛选有效数据
colnames(raw_data) <- c("item", "item_en", "2017", "2018", "2019", "2020", "2021", "2022", "2023")
data_clean <- raw_data %>%
filter(!is.na(`2017`)) %>%
mutate(category = case_when(
str_detect(item, "可支配收入|现金可支配收入") ~ "income",
str_detect(item, "消费支出|现金消费支出") ~ "expense",
TRUE ~ "sub_item"
))
# 转换为长格式
long_data <- data_clean %>%
pivot_longer(cols = `2017`:`2023`, names_to = "year", values_to = "value") %>%
mutate(year = as.numeric(year))
df <- long_data
DT::datatable(df)3.2 图形2——雷达图
library(tidyverse)
library(fmsb)
library(scales)
# 1. 读取并预处理数据
raw_data <- read_excel("全国人均收入支出.xlsx", skip = 4)
colnames(raw_data) <- c("item", "item_en", "2017", "2018", "2019", "2020", "2021", "2022", "2023")
# 2. 清洗并转换数据
income_2023 <- raw_data %>%
# 筛选收入相关行(只保留可支配收入的细分项)
filter(str_detect(item, "^[1-4]\\.")) %>% # 匹配以1.、2.、3.、4.开头的行
# 选择2023年数据
select(item, "2023") %>%
# 重命名和转换
mutate(
income_type = case_when(
str_detect(item, "^1\\.") ~ "工资性收入",
str_detect(item, "^2\\.") ~ "经营净收入",
str_detect(item, "^3\\.") ~ "财产净收入",
str_detect(item, "^4\\.") ~ "转移净收入"
),
amount = as.numeric(`2023`)
) %>%
# 处理重复值 - 对相同类型的收入取平均值
group_by(income_type) %>%
summarise(amount = mean(amount, na.rm = TRUE))
# 3. 检查数据
print(income_2023)# A tibble: 4 × 2
income_type amount
<chr> <dbl>
1 工资性收入 14882.
2 经营净收入 4079.
3 财产净收入 3299
4 转移净收入 4239.
# 4. 转换为雷达图所需格式
radar_data <- income_2023 %>%
pivot_wider(
names_from = income_type,
values_from = amount,
values_fn = list(amount = mean) # 明确指定处理重复值的方式
) %>%
as.data.frame()
# 5. 准备雷达图参数
max_values <- apply(radar_data, 2, max, na.rm = TRUE) * 1.2
min_values <- rep(0, ncol(radar_data))
plot_data <- rbind(max_values, min_values, radar_data)
rownames(plot_data) <- c("max", "min", "2023")
# 6. 绘制雷达图
radarchart(
plot_data,
axistype = 1,
title = "2023年全国居民收入来源结构",
pcol = c("#1B9E77", "#D95F02", "#7570B3", "#E7298A"),
pfcol = alpha(c("#1B9E77", "#D95F02", "#7570B3", "#E7298A"), 0.3),
plwd = 2,
cglcol = "grey",
cglty = 1,
axislabcol = "grey50",
vlcex = 0.9,
calcex = 0.8
)
# 添加图例
legend(
"topright",
legend = colnames(plot_data),
bty = "n",
pch = 20,
col = alpha(c("#1B9E77", "#D95F02", "#7570B3", "#E7298A"), 0.5),
text.col = "grey40",
pt.cex = 2
)图形解读:
3.2.1 1. 收入结构可视化解读
3.2.1.1 (1)图形基本特征
四维度展示:雷达图四个顶点分别代表工资、经营、财产、转移四种收入类型
面积占比:图形中心到各顶点的距离反映金额大小(原始数据2023年值):
工资性收入:22,053元(最长边)
经营净收入:6,542元
财产净收入:3,362元(最短边)
转移净收入:7,261元
3.2.1.2 (2)关键比例关系
工资收入主导:占可支配收入总量的56.2%(22,053/39,218)
财产收入薄弱:仅为工资收入的15.2%(3,362/22,053)
转移>经营收入:反映社会保障(养老金/补贴)对居民收入的贡献已超过经营性收入
3.2.2 2. 结构特征深度分析
3.2.2.1 (1)收入不平等暗示
工资-财产收入比达6.6:1,显著高于发达国家平均水平(通常3:1以内),表明:
劳动报酬在分配中占绝对主导
居民财产性收入渠道有限(房产租金/理财收益等发展不足)
3.2.2.2 (2)政策影响痕迹
转移收入突出(占比18.5%)体现:
养老金连续19年上调(2023年上调3.8%)
乡村振兴中的农民补贴政策
经营收入复苏(较2022年增长5.9%)反映:
小微企业税收优惠延续
平台经济监管常态化后个体经济回暖
4 变量关系可视化
4.1 案例数据解释与展示
library(tidyverse)
library(readxl)
# 读取Excel数据(跳过前4行标题行)
raw_data <- read_excel("全国人均收入支出.xlsx", skip = 4)
# 清洗列名并筛选有效数据
colnames(raw_data) <- c("item", "item_en", "2017", "2018", "2019", "2020", "2021", "2022", "2023")
data_clean <- raw_data %>%
filter(!is.na(`2017`)) %>%
mutate(category = case_when(
str_detect(item, "可支配收入|现金可支配收入") ~ "income",
str_detect(item, "消费支出|现金消费支出") ~ "expense",
TRUE ~ "sub_item"
))
# 转换为长格式
long_data <- data_clean %>%
pivot_longer(cols = `2017`:`2023`, names_to = "year", values_to = "value") %>%
mutate(year = as.numeric(year))
df <- long_data
DT::datatable(df)4.2 图形3——条形图
library(ggplot2)
library(dplyr)
# 1. 确保数据干净
key_expenses <- long_data %>%
filter(year == 2023,
item %in% c("1.食品烟酒", "3.居住", "5.交通通信", "6.教育文化娱乐")) %>%
mutate(
item = gsub("^\\d\\.", "", item), # 移除编号(如"1.")
value = as.numeric(value) # 强制转换为数值
)
# 2. 绘制修正后的图表
ggplot(key_expenses,
aes(x = reorder(item, value),
y = value,
fill = item)) +
geom_col(width = 0.6, show.legend = FALSE) +
geom_text(aes(label = scales::comma(value)), # 添加千位分隔符
hjust = -0.2, size = 3.5) +
coord_flip() +
labs(title = "2023年核心消费支出对比",
subtitle = "数据来源:国家统计局",
x = "",
y = "金额(元)") +
theme_minimal(base_size = 12) +
scale_fill_manual( # 改用手动指定颜色
values = c("#66C2A5", "#FC8D62", "#8DA0CB", "#E78AC3") # Set2配色手动实现
) +
expand_limits(y = max(key_expenses$value) * 1.2) # 调整Y轴范围图形解读:
4.2.1 1. 支出结构特征
4.2.1.1 (1)绝对金额对比
支出类别 金额(元) 占比 类型特征 食品烟酒 76,983 82.1% 生存型消费 居住 6,095 6.5% 基本生活需求 交通通信 3,682 3.9% 发展型消费 教育文化娱乐 2,902 3.1% 享受型消费 4.2.1.2 (2)消费结构问题
恩格尔系数畸高:食品支出占比超80%(正常应<30%),强烈建议核查数据准确性
居住支出偏低:仅占6.5%,远低于一般家庭20-30%的合理区间
5 样本相似性可视化
5.1 案例数据解释与展示
library(tidyverse)
library(readxl)
# 读取Excel数据(跳过前4行标题行)
raw_data <- read_excel("全国人均收入支出.xlsx", skip = 4)
# 清洗列名并筛选有效数据
colnames(raw_data) <- c("item", "item_en", "2017", "2018", "2019", "2020", "2021", "2022", "2023")
data_clean <- raw_data %>%
filter(!is.na(`2017`)) %>%
mutate(category = case_when(
str_detect(item, "可支配收入|现金可支配收入") ~ "income",
str_detect(item, "消费支出|现金消费支出") ~ "expense",
TRUE ~ "sub_item"
))
# 转换为长格式
long_data <- data_clean %>%
pivot_longer(cols = `2017`:`2023`, names_to = "year", values_to = "value") %>%
mutate(year = as.numeric(year))
df <- long_data
DT::datatable(df)5.2 图形4——相关矩阵图
library(GGally)
library(dplyr)
library(tidyr)
# 1. 数据准备与清洗
cor_data <- long_data %>%
filter(item %in% c("可支配收入", "1.食品烟酒", "3.居住", "6.教育文化娱乐")) %>%
mutate(
# 清洗项目名称
item = gsub("^\\d\\.", "", item),
# 确保数值格式
value = as.numeric(value)
) %>%
select(year, item, value) %>%
pivot_wider(
names_from = item,
values_from = value,
values_fn = mean # 处理可能的重复值
) %>%
# 删除包含NA的年份
na.omit()
# 2. 验证数据结构
print(glimpse(cor_data))Rows: 7
Columns: 5
$ year <dbl> 2017, 2018, 2019, 2020, 2021, 2022, 2023
$ 可支配收入 <dbl> 25974, 28228, 30733, 32189, 35128, 36883, 39218
$ 食品烟酒 <dbl> 5223.5, 5498.5, 5941.0, 6232.5, 6980.5, 7289.5, 7796.5
$ 居住 <dbl> 2813.0, 3131.0, 3405.5, 3494.5, 3770.5, 3958.0, 4168.0
$ 教育文化娱乐 <dbl> 2085.5, 2225.0, 2512.5, 2031.5, 2598.5, 2468.5, 2903.0
# A tibble: 7 × 5
year 可支配收入 食品烟酒 居住 教育文化娱乐
<dbl> <dbl> <dbl> <dbl> <dbl>
1 2017 25974 5224. 2813 2086.
2 2018 28228 5498. 3131 2225
3 2019 30733 5941 3406. 2512.
4 2020 32189 6232. 3494. 2032.
5 2021 35128 6980. 3770. 2598.
6 2022 36883 7290. 3958 2468.
7 2023 39218 7796. 4168 2903
# 3. 绘制相关性矩阵图
plot <- ggpairs(
cor_data[, -1], # 排除year列
columnLabels = c("可支配收入", "食品烟酒", "居住", "教育文化娱乐"),
upper = list(
continuous = wrap("cor",
method = "pearson",
size = 5,
color = "black",
display_grid = FALSE)
),
lower = list(
continuous = wrap("smooth",
alpha = 0.5,
color = "#1F77B4",
se = FALSE)
),
diag = list(
continuous = wrap("densityDiag",
fill = "#FF7F0E",
alpha = 0.7)
)
) +
theme_bw(base_size = 12) +
labs(title = "可支配收入与主要支出相关性分析",
subtitle = paste("数据年份:", min(cor_data$year), "-", max(cor_data$year)))
# 4. 显示图形
print(plot)图形解读:
5.2.1 1. 图形构成解析
对角线上方:显示皮尔逊相关系数(取值-1到1)
对角线下方:带置信区间的散点平滑曲线
对角线:各变量的分布密度曲线
5.2.2 2. 关键相关性分析
5.2.2.1 (1)收入与食品支出
相关系数:通常为0.6-0.8
经济学解释:
正相关显著,符合恩格尔定律
但过高相关性(>0.9)可能预示消费结构单一
5.2.2.2 (2)收入与居住支出
健康区间:0.4-0.6
异常信号:
若>0.7:反映房价压力过大
若<0.3:可能存在统计口径问题
5.2.2.3 (3)教育与收入
理想特征:
中等正相关(0.5左右)
散点图应呈向上倾斜趋势
5.2.3 3. 典型问题诊断
相关系数范围 潜在问题 政策建议 (-∞,0.3] 统计口径不一致/数据错误 核查指标定义 (0.3,0.5) 消费结构升级不足 加强文教领域投入 [0.8,1) 过度依赖单一消费类型 优化收入分配结构
6 时间序列可视化
6.1 案例数据解释与展示
library(tidyverse)
library(readxl)
# 读取Excel数据(跳过前4行标题行)
raw_data <- read_excel("全国人均收入支出.xlsx", skip = 4)
# 清洗列名并筛选有效数据
colnames(raw_data) <- c("item", "item_en", "2017", "2018", "2019", "2020", "2021", "2022", "2023")
data_clean <- raw_data %>%
filter(!is.na(`2017`)) %>%
mutate(category = case_when(
str_detect(item, "可支配收入|现金可支配收入") ~ "income",
str_detect(item, "消费支出|现金消费支出") ~ "expense",
TRUE ~ "sub_item"
))
# 转换为长格式
long_data <- data_clean %>%
pivot_longer(cols = `2017`:`2023`, names_to = "year", values_to = "value") %>%
mutate(year = as.numeric(year))
df <- long_data
DT::datatable(df)6.2 图形5——气泡图
library(ggplot2)
# 1. 数据准备(扩展包含支出占比)
bubble_data <- cor_data %>%
mutate(
total_expense = `食品烟酒` + `居住` + `教育文化娱乐`,
food_ratio = `食品烟酒` / total_expense * 100,
edu_ratio = `教育文化娱乐` / total_expense * 100
)
# 2. 绘制动态气泡图
ggplot(bubble_data,
aes(x = `可支配收入`,
y = `教育文化娱乐`,
size = `居住`, # 气泡大小反映居住支出
color = food_ratio)) + # 颜色深浅反映食品支出占比
geom_point(alpha = 0.7) +
scale_size_continuous(
range = c(3, 12),
name = "居住支出(元)",
breaks = seq(2000, 8000, 2000)
) +
scale_color_gradient2(
low = "#2c7bb6",
mid = "#ffffbf",
high = "#d7191c",
midpoint = median(bubble_data$food_ratio),
name = "食品支出占比(%)"
) +
labs(
title = "收入-教育支出关系(气泡大小=居住支出)",
subtitle = paste0("数据年份:", min(bubble_data$year), "-", max(bubble_data$year)),
x = "人均可支配收入(元)",
y = "教育文化娱乐支出(元)"
) +
theme_minimal() +
theme(
legend.position = "right",
plot.title = element_text(face = "bold")
) +
geom_smooth(
method = "lm",
se = FALSE,
color = "grey30",
linetype = "dashed"
)图形解读:
1. 核心趋势分析
6.2.0.1 (1)收入与教育支出关系
正向关联:气泡整体呈右上倾斜分布,验证可支配收入增长带动教育文化支出增加(符合人力资本投资理论)
边际效应递减:高收入区间(>3.5万元)教育支出增速放缓,可能反映:
基础教育需求饱和
高等教育成本刚性
6.2.0.2 (2)居住支出挤压效应
气泡大小分布:居住支出集中在2000-4000元区间
最大气泡(4000元)多位于教育支出中低位区,验证”房价挤出文教消费”假说
3000元以下群体教育支出离散度更大(反映支付能力差异)
6.2.0.3 (3)食品支出占比警示
颜色分布:全区间食品占比>50%(红色主导)
远超发达国家均值(美国2023年为12.4%)
恩格尔系数居高不下,制约消费升级
6.2.1 2. 关键数据节点解读
特征坐标 经济学意义 政策启示 (3.5万元, 2500元, 大) 高收入高房价低教育投入 需调控学区房价格 (2.8万元, 3000元, 中红) 中等收入陷”温饱陷阱” 加强职业技能培训投入 (4.0万元, 4000元, 小蓝) 高收入低食品占比高教育投入 优质教育服务供给不足 6.2.2 3. 异常点诊断
左下角离群点(低收入高教育支出):
可能反映贫困家庭教育投资”孤注一掷”现象
或统计误差(如非全日制教育计入)
水平分布气泡簇(3万元收入线):
相同收入下教育支出差异达1800元
反映区域教育资源分配不均
6.2.3 4. 政策建议
短期:
对居住支出>35%的家庭提供教育补贴
将文教支出纳入个税专项附加扣除
长期:
建立教育储蓄账户制度
推动保障性租赁住房与优质教育资源绑定