数据可视化期末报告

Author

221527121张敏贤

1 报告要求

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

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

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

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

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

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

  • 评分标准:

    • 每章节图形各20分

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

    • 数据独特性强10%

    • 图形个性化强15%

2 类别数据可视化

2.1 案例数据解释与展示

# 加载必要的包
library(ggplot2)
library(dplyr)
library(tidyr)
library(DT)
library(ggridges)
library(plotly)
library(GGally)
library(RColorBrewer)
library(viridis)
library(ggcorrplot)
library(ggthemes)
library(patchwork)

# 设置主题
theme_set(theme_minimal())

# 使用R内置数据集mtcars
data(mtcars)
mtcars_cyl <- mtcars %>% 
  count(cyl) %>% 
  mutate(percent = n/sum(n)*100)

datatable(mtcars_cyl, 
          caption = "表1: 不同气缸数的汽车数量及百分比",
          options = list(pageLength = 5))
# 数据解释:
# - cyl: 气缸数(4,6,8)
# - n: 该气缸数的汽车数量
# - percent: 该气缸数汽车所占百分比

2.2 图形1——南丁格尔玫瑰图

# 图形1 - 南丁格尔玫瑰图
ggplot(mtcars_cyl, aes(x = factor(cyl), y = percent, fill = factor(cyl))) +
  geom_bar(stat = "identity", width = 1, color = "white") +
  coord_polar(start = 0) +
  scale_fill_brewer(palette = "Set2") +
  labs(title = "图形1: 不同气缸数汽车百分比南丁格尔玫瑰图",
       subtitle = "展示不同气缸数汽车在数据集中的比例",
       fill = "气缸数",
       x = NULL, y = "百分比(%)") +
  theme(axis.text.y = element_blank(),
        axis.ticks = element_blank(),
        panel.grid = element_blank())

  • 图形解读:该玫瑰图清晰地展示了8缸汽车在mtcars数据集中占比最大(约43.8%),而4缸和6缸汽车占比相近。这种可视化方式适合展示类别数据的比例关系,角度和半径的双重编码增强了比例差异的感知。

3 数据分布可视化

3.1 案例数据解释与展示

# 使用diamonds数据集
data(diamonds)
diamonds_sample <- diamonds %>% sample_n(1000)

datatable(diamonds_sample %>% select(carat, cut, color, clarity, price) %>% head(10),
          caption = "表2: 钻石数据集样本(前10行)",
          options = list(pageLength = 5))
# 数据解释:
# - carat: 钻石重量
# - cut: 切工质量(Fair, Good, Very Good, Premium, Ideal)
# - color: 钻石颜色(D到J,D最好)
# - clarity: 净度
# - price: 价格(美元)

3.2 图形2——小提琴

# 图形2 - 小提琴图
ggplot(diamonds_sample, aes(x = cut, y = price, fill = cut)) +
  geom_violin(trim = FALSE, alpha = 0.7) +
  geom_boxplot(width = 0.1, fill = "white") +
  scale_fill_viridis(discrete = TRUE) +
  labs(title = "图形2: 不同切工质量钻石价格分布小提琴图",
       x = "切工质量", 
       y = "价格(美元)") +
  theme(legend.position = "none")

  • 图形解读:小提琴图结合了箱线图和核密度估计,展示了不同切工质量钻石的价格分布。可以看出Premium切工的钻石价格中位数最高,而Fair切工的价格分布范围最广。有趣的是,切工质量与价格并非完全正相关,这可能与其他因素(如克拉数)有关。

4 变量关系可视化

4.1 案例数据解释与展示

# 使用iris数据集
data(iris)
datatable(head(iris, 10),
          caption = "表3: 鸢尾花数据集(前10行)",
          options = list(pageLength = 5))
# 数据解释:
# - Sepal.Length: 萼片长度
# - Sepal.Width: 萼片宽度
# - Petal.Length: 花瓣长度
# - Petal.Width: 花瓣宽度
# - Species: 鸢尾花种类(setosa, versicolor, virginica)

4.2 图形3——散点图矩阵

# 图形3 - 散点图矩阵
ggpairs(iris, columns = 1:4, 
        mapping = aes(color = Species, alpha = 0.5),
        upper = list(continuous = wrap("cor", size = 3)),
        lower = list(continuous = wrap("smooth", alpha = 0.3, size = 0.1)),
        diag = list(continuous = wrap("densityDiag", alpha = 0.7))) +
  labs(title = "图形3: 鸢尾花特征散点图矩阵") +
  theme(legend.position = "bottom")

  • 图形解读:散点图矩阵同时展示了多个变量间的两两关系。可以看出花瓣长度和花瓣宽度之间有最强的正相关性(相关系数高达0.96),且不同物种在这些特征上有明显区分。setosa物种在所有特征上都与其他两种有明显差异。

5 样本相似性可视化

5.1 案例数据解释与展示

# 使用USArrests数据集
data(USArrests)
USArrests_scaled <- as.data.frame(scale(USArrests))
USArrests_scaled$State <- rownames(USArrests)

datatable(head(USArrests, 10),
          caption = "表4: 美国各州逮捕率数据(前10行)",
          options = list(pageLength = 5))
# 数据解释:
# - Murder: 谋杀逮捕率(每10万人)
# - Assault: 袭击逮捕率
# - UrbanPop: 城市人口百分比
# - Rape: 强奸逮捕率

5.2 图形4——平行坐标图

# 使用USArrests数据集
data(USArrests)
USArrests_scaled <- as.data.frame(scale(USArrests))
USArrests_scaled$State <- rownames(USArrests)

# 准备平行坐标图数据
parallel_data <- USArrests_scaled %>% 
  gather(key = "Variable", value = "Value", -State) %>% 
  left_join(USArrests_scaled %>% select(State, Murder), by = "State")

# 图形4 - 修正后的平行坐标图
ggplot(parallel_data, aes(x = Variable, y = Value, group = State, color = Murder)) +
  geom_line(alpha = 0.6) +
  scale_color_viridis(option = "magma") +
  labs(title = "图形4: 美国各州逮捕率平行坐标图",
       x = "逮捕率类型", 
       y = "标准化值",
       color = "谋杀率") +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))

  • 图形解读:平行坐标图展示了各州在不同类型逮捕率上的表现。可以看出谋杀率高的州(如Florida)通常在其他暴力犯罪(Assault和Rape)上也较高。UrbanPop与其他犯罪类型的关联不明显,说明城市化程度与暴力犯罪率没有简单的线性关系。

6 时间序列可视化

6.1 案例数据解释与展示

# 使用economics数据集
data(economics)
economics_long <- economics %>% 
  select(date, pce, psavert, uempmed) %>% 
  gather(key = "variable", value = "value", -date)

datatable(head(economics, 10),
          caption = "表5: 美国经济时间序列数据(前10行)",
          options = list(pageLength = 5))
# 数据解释:
# - date: 日期
# - pce: 个人消费支出(十亿美元)
# - psavert: 个人储蓄率
# - uempmed: 失业周期中位数(周)

6.2 图形5——面积图

# 图形5 - 堆叠面积图
ggplot(economics_long, aes(x = date, y = value, fill = variable)) +
  geom_area(alpha = 0.8) +
  scale_fill_brewer(palette = "Set1") +
  labs(title = "图形5: 美国经济指标时间序列面积图",
       x = "年份", 
       y = "值",
       fill = "经济指标") +
  theme(legend.position = "bottom")

  • 图形解读:面积图展示了三个经济指标随时间的变化趋势。个人消费支出(pce)呈现稳定增长趋势,而个人储蓄率(psavert)在1980年代后明显下降。失业周期中位数(uempmed)在2008年金融危机期间有明显上升,反映了经济冲击对就业市场的持续影响。