数据可视化期末报告

Author

221527122张毅晋

1 报告要求

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

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

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

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

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

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

  • 评分标准:

    • 每章节图形各20分

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

    • 数据独特性强10%

    • 图形个性化强15%

library(tidyverse)
library(DT)
library(sjPlot)                      # 社会统计数据可视化
library(epade)                       # 3d数据图
library(ggiraphExtra)
library(gridExtra)                   # 为使用图形组合函数grid.arrange
library(treemap)                     # 树状图
library(vcd)
library(ggpubr)
library(RColorBrewer)
library(d3r)                           # 为了使用d3_nest函数
library(sunburstR)
library(readxl)
library(ggplot2)
library(tidyr)
library(DT)
library(factoextra)
library(readxl)

2 类别数据可视化

2.1 该数据集是一个 data.frame 类型的结构,共有 10 个变量,每行代表一颗钻石的记录。以下是每个变量的详细说明:

变量名 类型 描述
carat 数值型 钻石的克拉重量,是衡量钻石大小的常用指标。
cut 因子型 钻石的切工等级,分类变量,共有 5 个水平:Fair, Good, Very Good, Premium, Ideal。
color 因子型 钻石的颜色等级,表示钻石的无色程度,从 D(最好)到 J(最差)共 7 级。
clarity 因子型 钻石的净度等级,表示钻石内部缺陷的多少,从 I1 到 IF 共 8 个等级。
depth 数值型 深度百分比 = z / mean(x, y),描述钻石高度相对于其宽度的比例。
table 数值型 钻石的台面宽度占整个钻石宽度的比例,影响光线折射和视觉美感。
price 数值型 钻石的价格,以美元计。
x 数值型 钻石在 x 方向的长度(毫米)。
y 数值型 钻石在 y 方向的宽度(毫米)。
z 数值型 钻石在 z 方向的深度(毫米)。
library(ggplot2)
data("diamonds")

DT::datatable(diamonds,rownames = FALSE)

2.2 图形1——cut 分布(条形图)

library(ggplot2)
ggplot(diamonds, aes(x = cut)) +
  geom_bar(fill = "steelblue") +
  labs(title = "钻石切工等级分布(cut)", x = "切工", y = "数量")

  • 该图表展示的是根据 “diamonds” 数据集绘制的钻石切工质量(cut)与价格(以美元为单位)之间的关系。横轴表示切工质量的等级,从低到高依次为 Fair、Good、Very Good、Premium 和 Ideal;纵轴表示价格(单位:美元),范围从 0 到 20,000 美元。

    从图中可以看出:

    • “Fair” 切工的平均价格最低,约为 2,000-3,000 美元。

    • “Good” 切工的平均价格略高,约为 5,000-6,000 美元。

    • “Very Good” 切工的平均价格进一步上升,约为 10,000-12,000 美元。

    • “Premium” 切工的平均价格更高,约为 15,000-16,000 美元。

    • “Ideal” 切工的平均价格最高,接近 20,000 美元。

    总体趋势表明,切工质量越高,钻石的价格通常越高,尤其是 “Ideal” 切工显著优于其他等级。

3 数据分布可视化

3.1 图形2——price 分布(直方图 + 密度)

ggplot(diamonds, aes(x = price)) +
  geom_histogram(aes(y = ..density..), bins = 50, fill = "skyblue", color = "black", alpha = 0.6) +
  geom_density(color = "red", size = 1) +
  labs(title = "钻石价格分布", x = "价格", y = "密度")

图形解读:

  1. 钻石价格主要集中在 0 至 5,000 美元的范围内,密度最高点出现在接近 0 的位置。

  2. 价格在 5,000 美元左右时,密度开始显著下降。

  3. 随着价格超过 10,000 美元,密度逐渐变低,表明高价钻石(10,000 美元以上)的数量较少。

  4. 总体分布呈右偏态,绝大多数钻石价格低于 5,000 美元,少数钻石价格超过 10,000 美元。

红线表示拟合曲线(如核密度估计),用于更平滑地展示价格分布趋势。

4 变量关系可视化

4.1 图形3——carat vs price(散点图)

ggplot(diamonds, aes(x = carat, y = price, color = clarity)) +
  geom_point(alpha = 0.5, size = 1) +
  labs(title = "钻石克拉与价格关系", x = "克拉 (carat)", y = "价格") +
  scale_color_viridis_d()

  • 图形解读:

    • 价格随着克拉数增加总体呈上升趋势,尤其在 1 克拉以上时,价格增长更明显。

    • 净度高的钻石(比如 IF 和 VVS1,黄色和浅绿色)价格通常更高,尤其在较大克拉数时。

    • 净度较低的钻石(比如 I1 和 SI2,深紫色和紫色)价格相对较低,且分布较多在中小克拉数范围内。

    • 大多数钻石集中在 0.5 到 2 克拉之间,价格在 5,000 美元以下。

    总体来看,克拉数和净度都是影响价格的重要因素,越大越纯的钻石价格越高

5 样本相似性可视化

5.1 图形4——PCA 降维后散点图

# 仅保留数值变量并标准化
num_data <- scale(diamonds[, sapply(diamonds, is.numeric)])

# PCA 分析
pca <- prcomp(num_data)

# 可视化前两主成分
pca_df <- as.data.frame(pca$x)
pca_df$cut <- diamonds$cut

ggplot(pca_df, aes(x = PC1, y = PC2, color = cut)) +
  geom_point(alpha = 0.5, size = 1) +
  labs(title = "PCA主成分分析:样本相似性", x = "主成分1", y = "主成分2", color = "切工") +
  scale_color_manual(values = c("Fair" = "purple", "Good" = "darkviolet", "Very Good" = "cyan", "Premium" = "green", "Ideal" = "yellow"),
                     labels = c("Fair" = "Fair", "Good" = "Good", "Very Good" = "非常好", "Premium" = "高级", "Ideal" = "理想"))

  • 图形解读:

    • 大多数数据点集中在 PC1 0 到 10 之间,PC2 -5 到 5 之间,形成一个密集的簇。
    • 不同切工质量的样本在二维空间中有些许重叠,但总体分布趋势表明切工质量可能与主成分有一定关联,尤其是 Ideal(黄色)点略偏向 PC2 正向,Fair(紫色)点则分布较分散。
    • 数据经过标准化(scale)和 PCA 降维,突出样本间的相似性。

6 时间序列可视化

6.1 案例数据解释与展示

  • 展示茅台股价最高、最低、开盘、收盘价
# 读取 Excel 文件中的第一个工作表
data5 <- read_excel("茅台.xlsx")
data5$日期 <- as.Date(data5$日期, format = "%Y/%m/%d")
library(zoo)


DT::datatable(data5,rownames = FALSE)
# 添加日期索引列
data5 <- data5 %>%
  mutate(
    date_index = 1:n(),
    ma5 = rollmean(收盘价, 5, fill = NA, align = "right"),
    ma10 = rollmean(收盘价, 10, fill = NA, align = "right"),
    ma20 = rollmean(收盘价, 20, fill = NA, align = "right")
  )

6.2 图形5——茅台股票21-23年末股价K线图

# 时间序列可视化
ggplot(data5, aes(x = 日期)) +
  geom_line(aes(y = 收盘价), color = "black", size = 0.8, alpha = 0.7) +
  geom_line(aes(y = ma5), color = "blue", size = 0.6) +
  geom_line(aes(y = ma10), color = "green", size = 0.6) +
  geom_line(aes(y = ma20), color = "red", size = 0.6) +
  labs(title = "茅台收盘价及移动平均线",
       x = "日期", y = "价格",
       caption = "蓝色:5日均线,绿色:10日均线,红色:20日均线") +
  theme_minimal()

  • 图形解读:

    • 总体趋势:收盘价(黑色线)从2015年起稳步上升,约在2020年达到峰值约40元,随后大幅下降,到2025年跌至10元以下。
    • 移动平均线

      • 5日均线(蓝色):反映短期波动,紧跟收盘价变化。

      • 10日均线(绿色):显示中期趋势,较平滑。

      • 20日均线(红色):表示长期趋势,滞后于短期均线。

    • 关键观察

      • 2020年左右出现显著高峰,各移动平均线向上汇聚。

      • 2020年后,价格和均线呈下行分化,显示熊市趋势。

      • 短期均线(5日、10日)与长期均线(20日)的交叉可能预示买卖信号。