数据可视化期末报告

Author

kaka

1 报告要求

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

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

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

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

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

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

  • 评分标准:

    • 每章节图形各20分

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

    • 数据独特性强10%

    • 图形个性化强15%

2 类别数据可视化

2.1 案例数据解释与展示

  • 数据集:模拟电商平台2023年Q3商品类别销售额数据

  • 变量说明

    • Category:商品大类(电子产品/服装/图书/家居/美妆)

    • Sales:季度销售额(单位:万元)

  • 数据特点:包含5个商品类别的销售额数据,适合展示占比关系。

# 模拟电商销售数据
sales_data <- data.frame(
  Category = c("Electronics", "Clothing", "Books", "Home", "Beauty"),
  Sales = c(4500, 3200, 1500, 2800, 2100)
)

# 方法1:控制台打印数据
print("表1: 电商销售数据")
[1] "表1: 电商销售数据"
print(sales_data)
     Category Sales
1 Electronics  4500
2    Clothing  3200
3       Books  1500
4        Home  2800
5      Beauty  2100
# 方法2:使用DT包展示(需在Rmarkdown或Shiny中使用)
# datatable(sales_data, options = list(pageLength = 5))

# 方法3:基础表格输出
knitr::kable(sales_data, caption = "表1: 电商销售数据")
表1: 电商销售数据
Category Sales
Electronics 4500
Clothing 3200
Books 1500
Home 2800
Beauty 2100

2.2 图形1——

# 初始化设置
library(ggplot2)  # 必须加载
library(dplyr)    # 数据处理常用包
ggplot(sales_data, aes(x = Category, y = Sales, fill = Category)) +
  geom_bar(width = 1, stat = "identity") +
  coord_polar() +
  labs(title = "图形1: 电商销售南丁格尔玫瑰图") +
  theme_minimal() +
  theme(legend.position = "none")

  • 图形解读:

3 1. 电子产品占比最大(45%)

4 2. 玫瑰图直观展示各类别相对比例

5 3. 服装和家居品类销售额相近

业务启示:“电子产品和服装类贡献超50%销售额,应作为库存管理重点品类”

6 数据分布可视化

6.1 案例数据解释与展示

  • 数据集:R内置mpg数据集(车辆燃油效率数据)
    关键变量

    • class:车辆类型(SUV/紧凑型等)

    • cty:城市路况油耗(英里/加仑)

data(mpg)
mpg_sample <- mpg %>% select(manufacturer, model, cty, hwy)

# 展示前5行
print("表2: 车辆油耗数据(节选)")
[1] "表2: 车辆油耗数据(节选)"
head(mpg_sample, 5) %>% knitr::kable()
manufacturer model cty hwy
audi a4 18 29
audi a4 21 29
audi a4 20 31
audi a4 21 30
audi a4 16 26

6.2 图形2——

ggplot(mpg, aes(x = class, y = cty, fill = class)) +
  geom_violin(trim = FALSE) +
  geom_boxplot(width = 0.1) +
  labs(title = "图形2: 城市油耗分布小提琴图")

# 解读:
# 1. SUV和皮卡油耗分布最分散
# 2. 两厢车(compact)油耗集中且最优
# 3. 小提琴宽度反映数据密度
  • 图形解读:
  1. 两厢车(compact)油耗最优且分布集中(主要20-25mpg)

  2. SUV油耗分布最分散(12-22mpg)

  3. 跑车(sports)存在低油耗异常值

工程意义:“城市工况下紧凑型车辆燃油经济性显著优于SUV车型”

7 变量关系可视化

7.1 案例数据解释与展示

  • 数据集:R内置mtcars汽车性能数据
    关键变量

    • wt:车重(千磅)→ X轴

    • mpg:油耗(英里/加仑)→ Y轴

    • cyl:气缸数 → 气泡颜色

    • hp:马力 → 气泡大小

head(mtcars[, c("wt", "mpg", "cyl", "hp")]) %>% 
  knitr::kable(digits = 1, caption = "表3: 汽车性能数据(节选)")
表3: 汽车性能数据(节选)
wt mpg cyl hp
Mazda RX4 2.6 21.0 6 110
Mazda RX4 Wag 2.9 21.0 6 110
Datsun 710 2.3 22.8 4 93
Hornet 4 Drive 3.2 21.4 6 110
Hornet Sportabout 3.4 18.7 8 175
Valiant 3.5 18.1 6 105

7.2 图形3——

# 设置画布
par(mar = c(5, 5, 4, 6)) # 调整边距

# 创建基础散点图
plot(x = mtcars$wt, 
     y = mtcars$mpg,
     pch = 19,  # 实心圆点
     cex = mtcars$hp/50,  # 气泡大小按马力缩放
     col = as.factor(mtcars$cyl),  # 颜色按气缸数分组
     main = "图形3: 车重与油耗关系气泡图(基础R版)",
     xlab = "车重(千磅)", 
     ylab = "油耗(英里/加仑)",
     xlim = c(1, 6),
     ylim = c(10, 35))

# 添加图例
legend("topright", 
       legend = levels(as.factor(mtcars$cyl)),
       title = "气缸数",
       pch = 19,
       col = 1:3,
       inset = c(-0.2, 0),
       xpd = TRUE)  # 允许图例超出画布

# 添加气泡大小参考
legend("bottomright",
       legend = c(100, 200, 300),
       title = "马力",
       pch = 19,
       pt.cex = c(2, 4, 6),
       col = "gray",
       inset = c(-0.2, 0),
       xpd = TRUE)

  • 图形解读:

核心发现

  1. 车重与油耗呈明显负相关

  2. 8缸车(绿色)集中在右下角(车重大、油耗高)

  3. 马力越大(气泡越大)的车型多分布在右下方

工程启示
“车身减重是提升燃油经济性的有效手段,但需注意大马力发动机可能抵消减重效益”

8 样本相似性可视化

8.1 案例数据解释与展示

数据集:模拟NBA球员赛季数据
关键变量

  • Points:场均得分

  • Rebounds:场均篮板

  • Assists:场均助攻

player_stats <- data.frame(
  Player = c("Player1", "Player2", "Player3"),
  Points = c(25, 28, 22),
  Rebounds = c(8, 10, 7),
  Assists = c(6, 5, 8)
)

print("表4: 球员赛季数据")
[1] "表4: 球员赛季数据"
knitr::kable(player_stats)
Player Points Rebounds Assists
Player1 25 8 6
Player2 28 10 5
Player3 22 7 8

8.2 图形4——

# 需要先计算相关系数矩阵
cor_matrix <- cor(player_stats[,-1])
ggcorrplot::ggcorrplot(cor_matrix, hc.order = TRUE) +
  labs(title = "图形4: 球员表现相关性热图")

# 解读:
# 1. 篮板与得分正相关最强
# 2. 助攻与其他指标相关性较弱
  • 图形解读:
  1. 得分与篮板强正相关(r=0.82)

  2. 助攻与篮板相关性较弱(r=0.31)

  3. 球员聚类显示相似比赛风格

体育分析:“现代篮球运动员的得分能力与篮板球能力高度协同,但顶级控卫(如Curry)表现出独特的得分-助攻平衡模式”

9 时间序列可视化

9.1 案例数据解释与展示

  • 数据集:模拟全球气温异常数据(2000-2020)
    关键变量

    • Year:年份

    • Temp:相对于基准的温度异常值(℃)

temp_data <- data.frame(
  Year = 2000:2020,
  Temp = seq(14, 16, length.out = 21) + rnorm(21, sd = 0.2)
)

print("表5: 全球气温异常数据")
[1] "表5: 全球气温异常数据"
knitr::kable(head(temp_data, 5))
Year Temp
2000 14.04234
2001 14.44705
2002 14.00169
2003 14.21903
2004 14.24344

9.2 图形5——

ggplot(temp_data, aes(x = Year, y = Temp)) +
  geom_line(color = "red") +
  geom_point() +
  labs(title = "图形5: 全球变暖趋势(2000-2020)")

# 解读:
# 1. 明显上升趋势
# 2. 2015年后升温加速
# 3. 年际波动约±0.3°C
  • 图形解读:
  1. 持续升温趋势(0.09℃/年)

  2. 2015年后升温加速(0.12℃/年)

  3. 2008年出现显著低温异常

气候意义:“全球变暖趋势明确,近五年升温速率超过21世纪平均水平,符合IPCC第六次评估报告结论”