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)数据可视化期末报告
1 报告要求
期末实验报告由5章节5个图形组成,每个章节需要作一个图形。
每个章节选择作什么图自主选择,作图前补充完整图形标题名称,例如:图形1——多变量条形图。
案例数据自主收集,不同章节可以公用一个数据集。但同学间不允许使用相同数据集。
每个章节的数据集合需要通过
datatable函数展示,并简要解释数据来源和变量意义。每个输出图形后需要对图形作简要解读,最少需针对图形提出一个观点。
渲染html文件保留代码展示,6月22日前将发布网址提交至共享文档
“8、期末报告”列中。评分标准:
每章节图形各20分
能有效输出图形和合理解释75%
数据独特性强10%
图形个性化强15%
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 = "密度")
图形解读:
钻石价格主要集中在 0 至 5,000 美元的范围内,密度最高点出现在接近 0 的位置。
价格在 5,000 美元左右时,密度开始显著下降。
随着价格超过 10,000 美元,密度逐渐变低,表明高价钻石(10,000 美元以上)的数量较少。
总体分布呈右偏态,绝大多数钻石价格低于 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日)的交叉可能预示买卖信号。