数据可视化期末报告

Author

221527227陈俊明

1 报告要求

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

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

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

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

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

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

  • 评分标准:

    • 每章节图形各20分

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

    • 数据独特性强10%

    • 图形个性化强15%

2 类别数据可视化

2.1 案例数据解释与展示

  • 数据为从kaggle上下载的统计竞赛2020.07,4S店客户基础信息数据。

  • 变量名称如下:

    CUST_SEX 客户性别:1=男 2=女

    CUST_AGE 客户年龄

    BUYERPART 车主性质:1=个人, 2=公司, 3=机关, 4=组织,5=其他

    CAR_MODEL 车型代码

    CAR_COLOR 车型颜色

    CAR_AGE 车龄:单位:天

    CAR_PRICE 车辆销售价格

    IS_LOAN 是否贷款买车

    LOAN_PERIED 贷款期限:1=6个月,2=9个月,3=12个月,4=24个月,5=36个月,6=48个月,7=60个月,8=其他

    LOAN_AMOUNT 贷款金额

    F_INSORNOT 新车投保是否在4s店

    ALL_BUYINS_N 在4S店购买保险总次数

    DLRSI_CNT 购买4S店专修险的次数

    GLASSBUYSEPARATE_CNT 购买玻璃单独险的次数

    SII_CNT 购买自燃险的次数

    IS_LOST 是否流失:1=流失,0=未流失

library(DT)
library(tidyverse)
options(DT.options = list(pageLength = 10))
data <- read.csv("car_info_test.csv")
data$CUST_SEX <-  factor(data$CUST_SEX,levels = c(1,2),labels = c("男","女"))
data$BUYERPART <- factor(data$BUYERPART,levels = c(1,2,3,4,5),labels = c("个人","公司","机关","组织","其他"))
datatable(data)

2.2 图形1——点阵图

library(ggpubr)
library(RColorBrewer)
df <- select(data,CUST_SEX,BUYERPART,ALL_BUYINS_N) %>%
  
  summarise(购险次数=sum(ALL_BUYINS_N,na.rm = T),.by = c(CUST_SEX,BUYERPART))
palette<-rev(brewer.pal(11,"RdYlGn"))       # 设置调色板
ggballoonplot(df,x="BUYERPART",y="CUST_SEX",   # 设置图形的x轴和y轴
   shape=21,                    # 设置形状,默认21,可选22,23,24,25
   size="购险次数",fill="购险次数",          # 设置点的大小和填充颜色变量
   size.range = c(7,15),                    # 设置最小点和最大点的范围
   rotate.x.text=FALSE,                     # x轴文本标签不旋转
   ggtheme=scale_fill_gradientn(colors=palette))+  # 设置渐变颜色
   theme(axis.text.y=element_text(angle=90))+      # y轴标签旋转90度
   ggtitle("客户性别和车主性质的点阵图")

  • 图形解读:个人性质的车主购买保险的次数在男性以及女性中均最多,且男性个人的购险次数比女性个人的更多。

3 数据分布可视化

3.1 案例数据解释与展示

  • 数据为R语言中的纽约空气质量数据

  • 变量说明如下:

    Ozone:臭氧

    Solar.R:太阳辐射

    Wind:风速

    Temp:温度

    Month:月份

    Day:日期

data <- airquality
datatable(data)

3.2 图形2——镜像直方图

library(e1071)                       # 用于计算偏度系数和峰度系数          
df <- data  %>%  na.omit() 

mytheme<-theme(plot.title=element_text(size="12"), # 设置主标题字体大小
   axis.title=element_text(size=10),               # 设置坐标轴标签字体大小
   axis.text=element_text(size=9),                # 设置坐标轴刻度字体大小
   legend.text=element_text(size="8"))            # 设置图例字体大小

ggplot(data=df,aes(x=Solar.R))+mytheme+    # 绘制直方图
  geom_histogram(aes(y=..density..),fill="lightgreen",color="gray50")+
  geom_rug(size=0.2,color="blue3")+    # 添加地毯图,须线的宽度为0.2
  geom_density(color="blue2",size=0.7)+ # 添加核密度曲线
  annotate("text",x=50,y=0.007,label=paste0("偏度系数 = ",round(skewness(df$Solar.R),4)),size=3)+  # 添加注释文本和偏度系数
  annotate("text",x=50,y=0.006,label=paste0("峰度系数 = ",round(kurtosis(df$Solar.R),4)),size=3)+  # 添加注释文本和峰度系数
  geom_vline(xintercept=mean(df$Solar.R),linetype="twodash",size=0.6,color="red")+          # 添加均值垂线,并设置线形、线宽和颜色
  annotate("text",x=mean(df$Solar.R)+0.25,y=0.0065,label=paste0("均值线 = ",round(mean(df$Solar.R),2)),size=3)+  # 添加注释文本
   geom_point(x=median(df$Solar.R),y=0,shape=21,size=4,fill="yellow")+# 添加中位数点
  annotate("text",x=median(df$Solar.R),y=0.0005,label=paste0("中位数 = ",round(median(df$Solar.R),2)),size=3,color="red3") # 添加注释文本

  • 图形解读:太阳辐射为左偏分布,偏度系数为-0.48,峰度系数为-0.97,均值为184.8,中位数为207。

4 变量关系可视化

4.1 案例数据解释与展示

  • 数据为R语言中的纽约空气质量数据

  • 变量说明如下:

    Ozone:臭氧

    Solar.R:太阳辐射

    Wind:风速

    Temp:温度

    Month:月份

    Day:日期

data <- airquality
datatable(data)

4.2 图形3——散点图

df <- data %>% na.omit()
ggplot(data=df,aes(x=Solar.R,y=Temp))+
    geom_point(shape=21,size=1.5,fill="deepskyblue")+
    geom_rug(position="jitter",size=0.5,color="deepskyblue")+  # 添加地毯图
    stat_smooth(method=loess,color="red",fill="deepskyblue",size=0.8)+
                                                # 添加局部加权回归拟合线
    geom_point(aes(x=mean(Solar.R),y=mean(Temp)),shape=21,fill="yellow",size=4)+
   ggtitle("散点图+地毯图+loess拟合")

  • 图形解读:太阳辐射和温度在一定范围内大致呈现一种正相关趋势,而超过一定范围后大致呈负相关趋势。

5 样本相似性可视化

5.1 案例数据解释与展示

  • 数据来源于kaggle的心脏病发作数据集

  • 变量说明:

    Age:患者的年龄

    Gender:患者的生理性别(男性设置为 1,女性设置为 0)

    Heart.rate:心率

    Systolic Blood Pressure:收缩压

    Diastolic Blood Pressure:舒张压

    Blood Sugar:患者的血糖水平

    Ck-mb:心肌损伤时释放的一种心肌酶水平

    Troponin:一种高度特异性的心肌损伤蛋白质生物标志物水平

    Result:指示患者是否经历过心脏病发作的结果标签

data <- read.csv("Medicaldataset.csv")
datatable(data)

5.2 图形4——雷达图

library(ggiraphExtra)
df <- data[,-c(1:2)] 
# 设置图形主题
myangle<-seq(-20,-340,length.out=8)   # 设置标签角度,使之垂直于坐标轴
mytheme<-theme_bw()+                  # 使用黑白主题
   theme(legend.position="bottom",    # 设置图例位置
   axis.text.x=element_text(size=9,color="blue4",angle=myangle))
                                  # 设置坐标轴标签字体大小、颜色和和角度
# 图(a)使用原始数据
ggRadar(data=df,aes(group=Result),    # 按地区分组
  rescale=FALSE,                        # 数据不归一化
  ylim=c(-20,180),                   # 设置y轴范围
  alpha=0,                              # 设置颜色透明度
  size=2)+                              # 设置点的大小
  mytheme+xlab("指标")+ylab("指标值")+  # 设置x轴和y轴标签
  ggtitle("原始数据雷达图") # 添加标题

  • 图形解读:雷达图表明心脏病患者的CK-mb值、Troponin值甚至Heart.rate值都会高于正常患者。

6 时间序列可视化

6.1 案例数据解释与展示

  • 数据来源于tushare金融数据库,后经过数据预处理得到

  • 变量说明:

    日期:时间

    RDP5:5日收益率

    RDP10:10日收益率

    RDP20:20日收益率

    RDP:收益率

data <- read.csv("GoldstockRDP2025.csv")
datatable(data)

6.2 图形5——时间序列动态交互图

library(dygraphs)
library(xts)
library(lubridate)
data$日期 <- ymd(data$日期)  # 自动识别YYYYMMDD格式
ts <- xts(x=data[,-1],order.by = data$日期)
dygraph(data=ts$RDP,xlab="时间",ylab="RDP",main="RDP的动态交互图")
  • 图形解读:中国黄金股票RDP(收益率)为2025年1月至2025年6月的收益率数据,从时序图上看,其大致平稳,即没有明显的周期或趋势。