library(readxl)
library(DT)
library(ggplot2)
library(plyr)
library(tidyr)
library(dplyr)
library(forcats)
data <- read_excel("E:/电商用户行为数据集.xlsx", sheet = 1)
datatable(data)数据可视化期末报告
1 报告要求
期末实验报告由5章节5个图形组成,每个章节需要作一个图形。
每个章节选择作什么图自主选择,作图前补充完整图形标题名称,例如:图形1——多变量条形图。
案例数据自主收集,不同章节可以公用一个数据集。但同学间不允许使用相同数据集。
每个章节的数据集合需要通过
datatable函数展示,并简要解释数据来源和变量意义。每个输出图形后需要对图形作简要解读,最少需针对图形提出一个观点。
渲染html文件保留代码展示,6月22日前将发布网址提交至共享文档
“8、期末报告”列中。评分标准:
每章节图形各20分
能有效输出图形和合理解释75%
数据独特性强10%
图形个性化强15%
2 类别数据可视化
2.1 案例数据解释与展示
数据来源
https://www.kaggle.com/datasets/kartikeybartwal/ecommerce-product-recommendation-collaborative
变量意义
User_ID:每个用户的唯一标识符,便于追踪和分析。
Age:用户的年龄,提供对人口统计偏好的洞察。
Gender:用户的性别,使能性别特定的推荐和定位。
Location:用户所在地区:郊区、农村、城市,影响偏好和购物习惯。
Income:用户的收入水平,表明购买力和支付能力。
Interests:用户的兴趣,如运动、时尚、技术等,指导内容和产品推荐。
Last_Login_Days_Ago:用户上次登录以来的天数,反映参与频率。
Purchase_Frequency:用户进行购买的频率,表明购物习惯和忠诚度。
Average_Order_Value:用户下单的平均价值,对定价和促销策略至关重要。
Total_Spending: 用户消费的总金额,表明终身价值和购买行为。
Product_Category_Preference: 用户偏好的特定产品类别。
Time_Spent_on_Site_Minutes:用户在电子商务平台上花费的时间,表明参与程度。
Pages_Viewed:用户在访问期间浏览的页面数量,反映浏览活动和兴趣。
Newsletter_Subscription:用户是否订阅了营销活动通知。
2.2 图形1——饼环图
library(ggiraphExtra)
ggPieDonut(data,aes(pies=Gender,donuts=Location))- 图形解读:饼环图展示了电商用户的性别和所在地区的分布,内外环分层呈现数据,比例清晰。男性用户比女性用户多。男性用户在郊区的比例最大,为20%;女性用户在城市的比例最大,为17.2%。
3 数据分布可视化
3.1 案例数据解释与展示
- 与图形一共用数据集
3.2 图形2——云雨图
df<-data |>select(Average_Order_Value,Total_Spending) |>
gather(everything(),key=指标,value=指标值) |> # 融合数据
mutate(指标=fct_inorder(指标)) |>
ddply("指标",transform,标准化值=scale(指标值)) # 计算标准化值
library(see) # 提供主题函数theme_modern
# 绘制云雨图
mytheme<-theme_modern()+
theme(legend.position="none",
plot.title=element_text(size=14,hjust=0.5)) # 调整标题位置
p1<-ggplot(df,aes(x=指标,y=标准化值,fill=指标))+
geom_violindot(dots_size=0.4,binwidth=0.07)+ # 绘制云雨图并设置点的大小和箱宽
mytheme+ggtitle("(a) 垂直排列(默认)")
p2<-ggplot(df,aes(x=指标,y=标准化值,fill=指标))+
geom_violindot(dots_size=0.7,binwidth=0.07)+
coord_flip()+mytheme+ggtitle("(b) 水平排列")
gridExtra::grid.arrange(p1,p2,ncol=2) # 按2列组合图形p1和p2- 图形解读:云雨图上方显示数据分布密度(“云”),下方用箱线图展示五数概括(“雨”),全面呈现Average_Order_Value和Total_Spending的分布特征与离散程度。
4 变量关系可视化
4.1 案例数据解释与展示
- 与图形一共用数据集
4.2 图形3——气泡图
df <- data[1:32, ]
ggplot(df,aes(x=Average_Order_Value,y=Pages_Viewed,color=Age))+
geom_point(aes(size=Age),alpha=0.5)+ # 气泡大小
scale_size(range=c(1,7))+ # 设置点的大小
theme(panel.grid.minor=element_blank())+ # 移除次网格线
theme(plot.title=element_text(size=12))+ # 设置标题字体大小
theme(legend.text=element_text(size=9,color="blue"))+ # 设置图例字体大小和颜色
scale_color_binned()+ # 设置连续分级色键
guides(size="none")+
annotate("text",x=100,y=50,label="气泡大小 = 年龄",size=5)# 添加注释文本- 图形解读:气泡图展示了电商用户下单的平均价值与在访问期间浏览的页面数量的负相关关系,气泡大小代表年龄,直观呈现了Average_Order_Value、Pages_Viewed和Age三变量间的交互影响。年龄较小的电商用户下单的平均价值偏高;年龄较大的电商用户在访问期间浏览的页面数量偏多。
5 样本相似性可视化
5.1 案例数据解释与展示
数据来源
https://www.kaggle.com/datasets/amldvvs/avocado-ripeness-classification-dataset/data
变量意义
firmness:果实硬度,穿透阻力(牛油果的硬度,单位N)
hue:果皮主色调(色相,0-360°)
saturation:色彩饱和度(0-100%)
brightness:亮度(0-100%)
color_category:视觉颜色分类(如深绿、紫色、黑色和绿色等)
sound_db:敲击声学响应(分贝,30-80dB)
weight_g:果实质量(克,150-300g)
size_cm3:果实体积(立方厘米,100-300cm³)
ripeness:成熟度分级标签(hard, pre-conditioned, breaking, firm-ripe, ripe)
data <- read.csv("E:/牛油果数据集.csv", header = TRUE)
datatable(data)5.2 图形4——平行坐标图
df <- data |> mutate(id=1:250) |>
gather(1:4,key=指标,value=数值) |>
mutate(指标=fct_inorder(指标))
ggplot(df,aes(x=指标,y=数值,group=id,color=color_category))+
geom_line(size=0.5)+ # 绘制折线
geom_point(shape=21,size=1.5,fill="gray50")+ # 绘制点
scale_x_discrete(guide=guide_axis(n.dodge=2))+ # 设置x轴标签为2行
theme(legend.position=c(0.8,0.8), # 设置图例位置
legend.background=element_blank())+ # 移除图例整体边框
guides(color=guide_legend(nrow=3,title=NULL))+ # 图例排成3行,去掉图例标题
ggtitle("平行坐标图") # 添加标题- 图形解读:平行坐标图通过平行纵轴展示多维数据,每条折线代表一个样本,可直观比较四种颜色的牛油果各指标(如果实硬度、果皮主色调、色彩饱和度和亮度)的分布及聚类关系,适用于分类数据对比分析。深绿牛油果的果实硬度和色彩饱和度最高,紫色牛油果的果皮主色调最高,绿色牛油果的亮度最高,黑色牛油果的果实硬度、果皮主色调、色彩饱和度和亮度都最低。
6 时间序列可视化
6.1 案例数据解释与展示
数据来源
https://cn.investing.com/equities/bilibili-inc-historical-data
变量意义
日期:交易日期
收盘:当日收盘价
开盘:当日开盘价
高:当日最高价
低:当日最低价
交易量:当日交易量
涨跌幅:当日涨跌幅度
data <- read_excel("E:/BILI历史数据.xlsx", sheet = 1)
datatable(data)6.2 图形5——K线图
library(zoo)
df <- data |> select(日期:交易量) |>
mutate(ma5 = rollmean(收盘, k = 5, fill = NA, align = "right"),
ma10 = rollmean(收盘, k = 10, fill = NA, align = "right"),
ma20 = rollmean(收盘, k = 20, fill = NA, align = "right"),
date_index = 1:253
)
df |> ggplot(aes(x = date_index)) +
geom_segment(aes(x = date_index, xend = date_index, y = 低, yend = 高)) +
geom_rect(aes(xmin = date_index - 0.4, xmax = date_index + 0.4,
ymin = pmin(开盘, 收盘), ymax = pmax(开盘, 收盘),
fill = 收盘 > 开盘)) +
geom_line(aes(y = ma5, color = "MA5"), size = 0.8) +
geom_line(aes(y = ma10, color = "MA10"), size = 0.8) +
geom_line(aes(y = ma20, color = "MA20"), size = 0.8) +
scale_fill_manual(values = c("TRUE" = "red", "FALSE" = "green")) +
scale_color_manual(values = c("MA5" = "blue", "MA10" = "orange", "MA20" = "purple")) +
scale_x_continuous(breaks = seq(1, nrow(df), by = 30),
labels = format(df$日期[seq(1, nrow(df), by = 30)], "%m-%d")) +
theme_minimal() + guides(fill="none")+
theme(legend.position = "top",
plot.margin = margin(b = 0)) +
labs(x = "", y = "", title = "哔哩哔哩公司K线图", color = "移动平均线")- 图形解读:K线图展示了哔哩哔哩公司2020年的股价走势,叠加MA5/MA10/MA20三条移动平均线,呈现短期波动与中长期趋势的对比关系。