数据可视化期末报告

Author

221527139 伍泉至

1 报告要求

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

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

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

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

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

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

  • 评分标准:

    • 每章节图形各20分

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

    • 数据独特性强10%

    • 图形个性化强15%

2 类别数据可视化

2.1 案例数据解释与展示

  • 这份数据文件包含了2016年5月至2025年3月期间广州市的多项经济与房地产相关指标,每月记录一次。以下是各列数据的详细解释: 数据列说明 时间:记录数据的日期,每月最后一天的数据 。二手房均价:广州市二手房的平均价格(单位:元/平方米)。 房价租金比:房价与月租金的比值,反映房产投资回收期。 土地出让建筑面积:当月土地出让的总建筑面积(单位:平方米)。 人均可支配收入:广州市居民人均可支配收入(单位:元) CPI(上年同月=100):广东省广州市:月:消费者价格指数,以上年同月为100计算的月度同比指数。 gdp:广州市国内生产总值(单位:万元) 年平均人数:广州市年平均人口数 结婚人数:广州市当月结婚登记人数 中长期贷款利率:5年以上:5年以上期限的贷款基准利率(单位:%)
library(tidyverse)
library(DT)
library(RColorBrewer)
library(gridExtra)                   # 为使用图形组合函数grid.arrange
library(ggiraphExtra)
library(ggpol)                       # 高亮显示时间段
library(plotrix)                     # 风筝图
library(ggstream)                    # 流线图
library(ggHoriPlot)                  # 地平线图
library(latticeExtra)  
library(forecast)                    # 使用ma(移动平均)函数
library(dygraphs)
library(vroom)
library(xts)
library(plotly)              
library(readr)





data <- read.csv("C:/Users/大三下/数据可视化/期末作业/data.csv")
 

 datatable(data,rownames = F)              

2.2 图形1——面积图

# 加载必要的包
library(tidyverse)
library(lubridate)
library(scales)


data <- read.csv("C:/Users/大三下/数据可视化/期末作业/data.csv", fileEncoding = "UTF-8")

setwd("C:/Users/大三下/数据可视化/期末作业/")
data <- read.csv("data.csv")

head(data)
        时间 二手房均价 房价租金比 土地出让建筑面积 人均可支配收入
1 2016-05-31      20460   41.29641           536762       46734.60
2 2016-06-30      21142   40.10740           804171       47324.24
3 2016-07-31      20710   40.80043          1147287       47933.54
4 2016-08-31      21282   41.05279           691777       48542.83
5 2016-09-30      21153   42.59287          2213679       49132.47
6 2016-10-31      21895   44.07093          4108518       49741.76
  CPI.上年同月.100..广东省广州市.月       gdp 年平均人数 结婚人数
1                             102.5  18100.41    8483041 92668.00
2                             102.0  42965.93    8502718 91995.24
3                             102.2  68660.29    8523052 91300.06
4                             102.1  94354.66    8543385 90604.88
5                             103.0 119220.17    8563063 89932.12
6                             102.8 144914.54    8583396 89236.94
  中长期贷款利率.5年以上
1                    4.9
2                    4.9
3                    4.9
4                    4.9
5                    4.9
6                    4.9
data <- read.csv("data.csv", stringsAsFactors = FALSE) %>% 
  mutate(
    时间 = as.Date(时间, format = "%Y-%m-%d")  # 明确指定日期格式
  ) %>% 
 
  filter(!is.na(时间))

str(data$时间)  # 应该显示为Date类型
 Date[1:107], format: "2016-05-31" "2016-06-30" "2016-07-31" "2016-08-31" "2016-09-30" ...
head(data$时间)  # 查看前几行日期
[1] "2016-05-31" "2016-06-30" "2016-07-31" "2016-08-31" "2016-09-30"
[6] "2016-10-31"
# 2. 绘制二手房均价面积图
ggplot(data, aes(x = 时间, y = 二手房均价)) +
  geom_area(fill = "#69b3a2", alpha = 0.5) +
  scale_x_date(
    expand = c(0, 0),
    date_breaks = "6 months",
    date_labels = "%Y-%m"
  ) +
  scale_y_continuous(
    labels = comma,
    name = "均价(元/㎡)"
  ) +
  labs(
    title = "广州二手房均价变化趋势",
    x = ""
  ) +
  theme_minimal() +
  theme(
    plot.title = element_text(hjust = 0.5, size = 14, face = "bold"),
    axis.text.x = element_text(angle = 45, hjust = 1)
  )

  • 图形解读:均价变化起起伏伏,2016-2021.05之间整体是上涨趋势,之后整体呈下降趋势

3 数据分布可视化

3.1 案例数据解释与展示

  • 这份数据文件包含了2017年中国股票市场的月度交易数据,数据来源于中国证券监督管理委员会。以下是各列数据的详细解释:时间:记录数据的年月,格式为YYYY.M。股票筹资额(亿元):当月股票市场筹资总额(单位:亿元)。成交总量(百万股):当月股票成交总量(单位:百万股)。成交总金额(亿元):当月股票成交总金额(单位:亿元)。期末总股本(亿股):当月期末市场总股本数(单位:亿股)。期末市值总值(亿元):当月期末市场总市值(单位:亿元)。期末上市公司数(家):当月期末上市公司总数。上证综合指数:上海证券交易所综合指数当月值。深证成份指数:深圳证券交易所成份指数当月值
# 加载必要的包
library(tidyverse)
library(readr)
library(DT)

# 1. 读取数据
data <- read_csv("C:/Users/大三下/数据可视化/期末作业/data1.csv", 
                locale = locale(encoding = "GB18030"),  # 使用GB编码读取中文
                skip = 5,  # 跳过前5行非数据内容
                col_names = FALSE)  # 暂时不读取列名

# 2. 设置正确的列名
colnames(data) <- c(
  "年月", 
  "成交金额(亿元)", 
  "成交数量(百万股)", 
  "成交均价(元)", 
  "总股本(万股)", 
  "总市值(亿元)", 
  "上市公司数(家)", 
  "上证综合指数", 
  "深证成份指数"
)

# 3. 数据清洗
clean_data <- data %>%
  filter(!is.na(年月)) %>%  # 移除空行
  mutate(
    年月 = as.Date(paste0(年月, ".1"), format = "%Y.%m.%d"),  # 转换为日期格式
    across(-年月, as.numeric)  # 将所有数值列转换为数字
  )

# 4. 显示处理后的数据表
datatable(
  clean_data,
  rownames = FALSE,
  options = list(
    scrollX = TRUE,
    language = list(
      url = '//cdn.datatables.net/plug-ins/1.10.21/i18n/Chinese.json'  # 中文显示
    )
  )
)

3.2 图形2——柱状图

# 5. 绘制成交金额趋势图
ggplot(clean_data, aes(x = 年月, y = `成交金额(亿元)`)) +
  geom_col(fill = "#1E88E5") +
  labs(
    title = "2017年股市成交金额趋势",
    x = "日期",
    y = "成交金额(亿元)"
  ) +
  scale_x_date(date_labels = "%Y-%m") +
  theme_minimal()

  • 图形解读:股市成交金融整体有一定的波动性,其中2017年4月下降幅度最大,之后整体呈缓慢增长趋势

4 变量关系可视化

4.1 案例数据解释与展示

  • iris数据集是R语言中最经典的内置数据集之一,常用于统计学和机器学习教学。以下是该数据集的详细解释:名称:鸢尾花(iris)数据集。来源:统计学家Ronald Fisher在1936年的论文中首次使用。用途:分类任务、数据可视化、统计分析的经典示例数据集。维度:150行 × 5列。变量说明Sepal.Length(萼片长度):单位厘米。Sepal.Width(萼片宽度):单位厘米。Petal.Length(花瓣长度):单位厘米。Petal.Width(花瓣宽度):单位厘米。Species(种类):鸢尾花的三个品种(分类变量)
library(DT)
library(tidyverse)

# 使用iris数据集
datatable(
  iris
) %>% 
  formatRound(columns = 1:4, digits = 2)  # 数值列保留2位小数

4.2 图形3——分布直方图

# 加载必要的包
library(tidyverse)
library(e1071) # 用于计算偏度系数

# 准备数据(使用R内置的iris数据集)
df <- iris %>% 
  select(-Species) %>%  # 移除分类变量
  gather(key = "指标", value = "指标值") %>%  # 转换为长格式
  mutate(指标 = fct_inorder(指标)) # 保持指标顺序

# 计算偏度系数
labels <- df %>% 
  group_by(指标) %>% 
  summarise(skewness = skewness(指标值)) %>% 
  mutate(skewness_label = sprintf("skewness == %.3f", skewness))

# 绘制分面直方图
ggplot(df, aes(x = 指标值, fill = 指标)) +
  geom_histogram(bins = 15, color = "gray50", alpha = 0.8) +
  geom_text(
    data = labels,
    aes(x = -Inf, y = Inf, label = skewness_label),
    hjust = -0.1, vjust = 1.2, parse = TRUE, size = 3.5, color = "grey40"
  ) +
  scale_fill_brewer(palette = "Set2") +
  guides(fill = "none") +
  facet_wrap(~指标, ncol = 2, scales = "free") +
  labs(
    title = "鸢尾花各指标分布直方图",
    x = "测量值",
    y = "频数"
  ) +
  theme_minimal() +
  theme(
    strip.text = element_text(face = "bold"),
    panel.spacing = unit(1, "lines")
  )

  • 图形解读:花萼长度(Sepal.Length)偏度 +0.309 → 轻微右偏分布分布形态:右侧尾部比左侧略长花萼宽度(Sepal.Width)偏度 +0.313 → 类似右偏特殊现象:在3.0cm附近出现明显峰值(可能是该品种的典型特征)右侧少量较宽样本(>3.8cm) 花瓣长度(Petal.Length)偏度 -0.269 → 左偏分布关键特征:左侧有更多极端小值(1-2cm区间)主峰集中在4-5cm区间花瓣宽度(Petal.Width)偏度 -0.101 → 接近对称分布特点:最接近正态分布,在0.5-1.0cm和1.5-2.0cm可能出现双峰。

5 样本相似性可视化

5.1 案例数据解释与展示

  • USJudgeRatings 是 R 语言内置的一个数据集,记录了美国 43 位高等法院法官的律师评分数据。该数据集通常用于多变量分析、主成分分析(PCA)、聚类分析等统计研究。

    变量说明:

    数据集包含 12 个变量,均为数值型(0-10 分),评分越高表示法官在该方面的表现越好:

    变量名 解释
    CONT 法官在法庭上的接触能力(Contact with the court)
    INTG 法官的诚信(Integrity)
    DMNR 法官的风度(Demeanor)
    DILG 法官处理案件的勤勉程度(Diligence)
    CFMG 法官对案件的管理能力(Case flow managing)
    DECI 法官的决策效率(Prompt decisions)
    PREP 法官的庭前准备(Preparation for trial)
    FAMI 法官对法律条文的熟悉程度(Familiarity with law)
    ORAL 法官的口头表达能力(Oral rulings)
    WRIT 法官的书面表达能力(Written rulings)
    PHYS 法官的体能与健康状况(Physical ability)
    RTEN 法官的整体表现(Retention - 是否值得留任)
library(DT)
library(plotrix)

# 使用R内置的USJudgeRatings数据集(美国法官评分数据)
data(USJudgeRatings)

# 用datatable展示数据
datatable(
  USJudgeRatings,
  rownames = TRUE,  # 显示法官姓名作为行名
  extensions = 'Buttons',
  options = list(
    dom = 'Bfrtip',
    buttons = c('copy', 'csv', 'excel'),
    pageLength = 10,
    scrollX = TRUE,
    language = list(
      search = "搜索:",
      info = "显示 _START_ 到 _END_ 条,共 _TOTAL_ 条"
    )
  ),
  caption = "美国法官评分数据(1-10分评分)"
) %>% 
  formatRound(columns = 1:12, digits = 2)  # 所有评分列保留2位小数

5.2 图形4——风筝图

library(plotrix)
library(DT)

# 使用内置数据集
data(USJudgeRatings)

# 1. 用DT展示数据
datatable(
  USJudgeRatings,
  options = list(scrollX = TRUE)
)
# 2. 准备矩阵数据
judge_mat <- as.matrix(USJudgeRatings)
rownames(judge_mat) <- rownames(USJudgeRatings)

# 3. 设置图形参数
par(mfrow = c(1, 2), mar = c(5, 4, 4, 2) + 0.1)

# 4. 绘制原始数据风筝图
kiteChart(
  t(judge_mat),
  varscale = FALSE,
  main = "(a) 原始评分数据",
  xlab = "法官",
  ylab = "评分指标",
  col = heat.colors(ncol(judge_mat))
)  # 注意这里闭合了括号

# 5. 绘制归一化数据风筝图
kiteChart(
  t(judge_mat),
  timex = TRUE,
  normalize = TRUE,
  shownorm = FALSE,
  main = "(b) 归一化数据",
  xlab = "法官",
  ylab = "",
  col = terrain.colors(ncol(judge_mat)))

  • 图形解读:原始评分数据,图中cont分数最高,表示与法律界人士的联系广度在美国法官当中是评分是最高的,是最低的oral,说明美国法官的口头表达评分是最低的。

6 时间序列可视化

6.1 案例数据解释与展示

  • Titanic 数据集是机器学习领域最著名的数据集之一,记录了泰坦尼克号上乘客的信息及生存情况。该数据集常用于分类任务(预测乘客是否幸存)、数据探索分析(EDA)特征工程练习。
library(ggplot2)
library(DT)
library(dplyr)
library(tidyr)
library(gridExtra)

# 将Titanic数据集转换为数据框格式
data_titanic <- as.data.frame(Titanic)

# 创建两个数据子集用于展示
df1 <- data_titanic |> 
  select(Class, Survived, Freq) |> 
  summarise(Count = sum(Freq), .by = c(Class, Survived))

df2 <- data_titanic |> 
  select(Sex, Age, Survived, Freq) |> 
  summarise(Count = sum(Freq), .by = c(Sex, Age, Survived))

# 用datatable展示数据
datatable(df1, rownames = FALSE, options = list(pageLength = 5))
datatable(df2, rownames = FALSE, options = list(pageLength = 5))

6.2 图形5——多变量条形图

# 图(a) 垂直并列条形图
p1 <- ggplot(df1, aes(x = Class, y = Count, fill = Survived)) +
  geom_col(width = 0.8, position = "dodge", color = "gray50") +
  scale_fill_brewer(palette = "Set2") +
  geom_text(aes(label = Count), position = position_dodge(0.9), vjust = -0.5, size = 3) +
  ylim(0, 1.1 * max(df1$Count)) +
  ggtitle("(a) 乘客等级与生存情况(垂直并列)") +
  xlab("乘客等级") +
  ylab("人数")

# 图(b) 水平并列条形图
p2 <- ggplot(df1, aes(x = Class, y = Count, fill = Survived)) +
  geom_col(width = 0.8, position = "dodge", color = "gray50") +
  geom_text(aes(label = Count), position = position_dodge(0.9), size = 3, hjust = 1.5) +
  coord_flip() +
  scale_fill_brewer(palette = "Set2") +
  ggtitle("(b) 乘客等级与生存情况(水平并列)") +
  xlab("乘客等级") +
  ylab("人数")


grid.arrange(p1, p2, ncol = 2)

  • 图形解读:从图中可以看出等级越高的乘客,生还概率越高等级,乘客等级越低,生还概率越低。并且只有等级为1st的乘客生还数量大于死亡数量