数据可视化期末报告

Author

221527116 古林琳

1 报告要求

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

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

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

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

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

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

  • 评分标准:

    • 每章节图形各20分

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

    • 数据独特性强10%

    • 图形个性化强15%

2 类别数据可视化

2.1 案例数据解释与展示

  • 数据来源于第三章,包含50名学生的信息,记录了他们的性别,专业,以及R语言和Python语言的考试成绩。
library(DT)
data2_1<-read.csv("E:/数据可视化/chap03/data2_1.csv")
DT::datatable(head(data2_1),rownames = FALSE) 

2.2 图形1——普通条形图

library(ggplot2)
library(gridExtra)
# 设置图形主题(可根据需设置或省略)
mytheme<-theme(plot.title=element_text(size="11"), # 设置主标题字体大小
   axis.title=element_text(size=10),               # 设置坐标轴标签字体大小
   axis.text=element_text(size=9),                 # 设置坐标轴刻度字体大小
   legend.position="none")                         # 删除图例

# 绘制图形p1、p2
p1<-ggplot(data2_1,aes(x=性别,fill=性别))+
  geom_bar(width=0.8)+          # 绘制条形图并设置条的宽度
  ylim(0,30)+                   # 设置y轴范围
  geom_text(stat="count", aes(label=..count..), hjust=1.2, color="white", size=3) +
  coord_flip()+                 # 坐标轴互换(水平摆放条)
  ylab("人数")+                 # 设置y轴标签
  mytheme+                      # 使用设置的主题          
  ggtitle("(a) 水平条形图")     # 添加标题

p2<-ggplot(data2_1,aes(x=专业,fill=专业))+
  geom_text(stat="count", aes(label=..count..), vjust=-0.5, size=3) + # 标签在条上方
  geom_bar(width=0.8)+mytheme+ylab("人数")+ggtitle("(b) 垂直条形图")

grid.arrange(p1,p2,layout_matrix=rbind(c(1,2)))

  • 图形解读:根据水平条形图,我们可以直观都看出女生人数比男生人数多;而垂直条形图可以看出,专业为管理的人数最多有22人,其次是金融有16人,最后是会计有12人。两幅图的总人数相等。

3 数据分布可视化

3.1 案例数据解释与展示

  • 数据来源于广金图书馆中国年度数据库(年度数据版),记录了2004-2014年北京市客运量和货运量的数据,包括铁路、公路、民航三种运输方式。
data<-read.csv("E:/数据可视化/期末报告/北京市客运量和货运量数据.csv", fileEncoding = "GBK")  
DT::datatable(data,rownames = FALSE)

3.2 图形2——对数变换的箱线图

library(ggplot2)
library(dplyr)
library(tidyr)
library(forcats)
library(RColorBrewer)

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

df<-data |> select(-c(1)) |> 
  gather(everything(),key=指标,value=指标值) |> 
  mutate(指标=fct_inorder(指标))

palette<-RColorBrewer::brewer.pal(6,"Set2")          # 设置离散型调色板
ggplot(df,aes(x=指标,y=log10(指标值)))+
  geom_boxplot(fill=palette)+                    # 绘制箱线图并设置填充颜色
  stat_summary(fun="mean",geom="point",shape=21,size=2.5,fill="white")

  • 图形解读:根据图形,货运量中:民航货运量的log值最高,说明其原始数值比其他指标大1-2个数量级,其次是公路货运量,最小是铁路货运量。客运量中:公路客运量最高,箱体更宽,说明年度波动最剧烈,铁路客运量与铁路客运量与铁路客运量位置接近,但铁路客运量的箱体更窄(年度波动较小,运营最稳定)。

4 变量关系可视化

4.1 案例数据解释与展示

  • 数据来源于ggplot2中的mpg数据,包含1999年-2008年美国汽车的燃油经营性数据,displ(发动机排量),hwy(高速油耗),cyl(气缸数),cty(城市油耗),manufacturer(汽车制造商)
library(ggplot2)
DT::datatable(mpg,rownames = FALSE) 

4.2 图形3——气泡图

df <- mpg
ggplot(df,aes(x=displ,y=hwy,color=class))+
  geom_point(aes(size=cyl),alpha=0.5)+   # 气泡大小=cyl
  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_brewer(palette = "Set1") +  # 使用离散调色板
  guides(size="none")+
  annotate("text",x=2,y=45,label="气泡大小 = cyl",size=3)# 添加注释文本

  • 图形解读:displ(发动机排量),hwy(高速油耗),cyl(气缸数),class(汽车类型),气泡越大气缸数也大。根据图形可以看出,排量和油耗呈负相关,SUV车型集中在高排量低油耗区域。

5 样本相似性可视化

5.1 案例数据解释与展示

  • 数据来源于ggplot2中的mpg数据,包含1999年-2008年美国汽车的燃油经营性数据,displ(发动机排量),hwy(高速油耗),cyl(气缸数),cty(城市油耗),manufacturer(汽车制造商)
library(ggplot2)
DT::datatable(mpg,rownames = FALSE) 

5.2 图形4——星图

library(tibble)
star_data<-mpg%>%
select(manufacturer, model, displ, hwy, cty, cyl) %>%  # 选择关键变量
  group_by(manufacturer) %>%                             # 按厂商分组
  summarise(across(c(displ, hwy, cty, cyl), mean)) %>%   # 计算均值
  column_to_rownames("manufacturer") %>%                  # 将厂商设为行名
  as.matrix() 

stars(star_data,
   full=TRUE,                                # 绘制出满圆
   scale=TRUE,                               # 将数据缩放到[0,1]的范围
   nrow=4,                                   # 4行布局
   len=0.7,                                    # 设置半径或线段长度的比例
   frame.plot=TRUE,                          # 添加边框
   draw.segments=TRUE,key.loc=c(9,2),   # 绘制圆弧图,并设置位置
   mar=c(0.5,0.1,0.1,0.1),                   # 设置图形边界
   cex=0.8)                                  # 设置标签字体大小

  • 图形解读:displ(发动机排量),hwy(高速油耗),cyl(气缸数),cty(城市油耗),manufacturer(汽车制造商),生成的星图直观呈现了各大汽车制造商的技术特征,可以看出chevrolet的排量和气缸数扇形显著突出,这种大排量车型专注动力性能,牺牲燃油经济性,为性能型汽车。而Honda车型的汽车高速油耗和城市油耗占比较大,优化燃油效率,为经济性汽车。

6 时间序列可视化

6.1 案例数据解释与展示

  • 数据来源于广金图书馆中国进度数据库,广州市按行业分的固定资产投资情况,提取了2024年2-12月的投资情况,分别选用了工业、制造业、建筑业、交通运输业和住宿餐饮业固定资产投资占比情况。
library(readxl)
data<-read_excel("E:/数据可视化/期末报告/广州市固定资产投资情况.xlsx")  
DT::datatable(data,rownames = FALSE)

6.2 图形5——折线图

library(dplyr)
library(lubridate)
data <- data %>%
  mutate(时间 = as.Date(时间))  # 自动忽略时间部分
df<-data |> select(时间,2:7) |> 
  filter(year(时间)==2024) |> 
  gather(2:7,key=指标,value=增长率)
 stopifnot("时间列必须是Date类型" = inherits(df$时间, "Date"))

# 绘制折线图
p <- ggplot(df,aes(x=时间,y=增长率,color=指标))+    # 设置x轴、y轴和线的颜色
  geom_line(size=0.45)+                        # 绘制折线图
  theme(legend.position="none",         # 删除图例
       axis.text.x=element_text(size=7,angle=90,hjust=1,vjust=1))+# 设置x轴标签角度
  theme(panel.grid.minor.x=element_blank(),  # 去掉x轴次网格线
        panel.grid.minor.y=element_blank())+ # 去掉y轴次网格线
  scale_x_date(expand=c(0,0),date_breaks="1 month",date_labels="%b")+# 设置x轴间隔为1个月
  facet_wrap(~指标,ncol=3,scale="free")+   # 按指标分面,并单独设置各分面图的y轴刻度
labs(
    title = "2024年广州市固定资产投资增长率趋势",
    x = "月份",
    y = "同比增长率"
  )
p

  • 图形解读:可以看出2024年第二产业(如制造业),投资持续低迷,全年负增长。而第三产业(如住宿餐饮业)等服务业呈季节性波动,年中6月和年末12月出现投资高峰。出现两极分化,第三产业与其他投资高速增长,基建同第二产业持续收缩,可能与政府宏观调控有关。