数据可视化期末报告

Author

221527111苏碧慧

1 报告要求

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

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

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

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

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

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

  • 评分标准:

    • 每章节图形各20分

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

    • 数据独特性强10%

    • 图形个性化强15%

2 类别数据可视化

2.1 案例数据解释与展示

  • 该数据来自中国经济社会大数据研究平台,数据记录了中国在不同年份的经济和能源相关指标的增长速度。具体来说,数据涵盖了从2012年到2021年的以下指标:

  • GDP增长速度:表示国内生产总值(GDP)的年度增长率

  • 能源生产增长速度:表示能源生产总量的年度增长率

  • 电力生产增长速度:表示电力生产总量的年度增长率

  • 能源消费增长速度:表示能源消费总量的年度增长率

  • 电力消费增长速度:表示电力消费总量的年度增长率

# 加载必要包
library(readxl)
library(tidyverse)
library(ggiraphExtra)
library(DT)
library(ggplot2)
library(gridExtra)

data <- read_excel("C:/Users/De16a/Desktop/能源生产、消费.xlsx")
df1 <- data %>% slice(-1)%>%
  slice(1:10)%>%
  select(年份, GDP增长速度, 能源生产增长速度, 电力生产增长速度)%>%
  pivot_longer(cols = -年份, names_to = "指标", values_to = "增长率")%>%
  mutate(增长率 = as.numeric(增长率))
df2 <- data %>% slice(-1)%>%
  slice(1:10)%>%
  select(年份, GDP增长速度, 能源消费增长速度, 电力消费增长速度)%>%
  pivot_longer(cols = -年份, names_to = "指标", values_to = "增长率")%>%
  mutate(增长率 = as.numeric(增长率))

DT::datatable(df1,rownames = FALSE)
DT::datatable(df2,rownames = FALSE)

2.2 图形1——多变量条形图

# 生产指标条形图(并列条形图)
p1 <- ggplot(df1, aes(x = 年份, y = 增长率, fill = 指标)) +
  geom_col(position = position_dodge(width = 0.8), width = 0.7) +  # 并列柱状图
  scale_fill_brewer(palette = "Set1", 
                   labels = c("GDP增长", "能源生产增长", "电力生产增长")) +
  labs(title = "中国能源生产相关指标年度增长率",
       subtitle = "2012-2021年数据",
       x = "年份", y = "增长率(%)",
       fill = "指标类型") +
  theme_minimal(base_size = 12) +
  theme(
    axis.text.x = element_text(angle = 45, hjust = 1, size = 10),
    legend.position = "bottom",
    plot.title = element_text(face = "bold", hjust = 0.5),
    panel.grid.major.x = element_blank()
  ) +
  scale_y_continuous(expand = expansion(mult = c(0, 0.1))) +  # 调整y轴范围
  geom_hline(yintercept = 0, linetype = "solid", color = "black")  # 添加基准线

# 消费指标条形图(堆叠条形图)
p2 <- ggplot(df2, aes(x = 年份, y = 增长率, fill = 指标)) +
  geom_col(position = "stack") +  # 堆叠柱状图
  scale_fill_manual(values = c("#66c2a5", "#fc8d62", "#8da0cb"),  # 自定义颜色
                   labels = c("GDP增长", "能源消费增长", "电力消费增长")) +
  labs(title = "中国能源消费相关指度增长率",
       subtitle = "堆叠图展示总量关系标年",
       x = "年份", y = "增长率(%)",
       fill = "") +
  theme_minimal(base_size = 12) +
  theme(
    axis.text.x = element_text(angle = 45, hjust = 1, size = 10),
    legend.position = "bottom",
    plot.title = element_text(face = "bold", hjust = 0.5),
    panel.grid.major.x = element_blank()
  ) +
  scale_y_continuous(expand = expansion(mult = c(0, 0.1))) +
  geom_hline(yintercept = 0, linetype = "solid", color = "black")

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

  • 图形解读:左边是一个柱状图,展示了 2012 年至 2021 年中国能源生产相关指标和能源消费相关指标的年度增长率(%)。 从图中可以看出,GDP 增长率和能源生产增长率在 2012 年至 2021 年间呈现出一定的波动趋势。例如,GDP 增长率在 2012 年至 2014 年间较高,随后有所下降并在 2021 年略有回升。能源生产增长率和电力生产增长率的变化趋势相对较为平稳,但也存在一定的波动。这表明中国经济增长与能源生产和电力生产之间存在一定的关联性。
  • 为了更好地展示总量关系,右边是一个堆叠柱状图,直观地展示了各指标的增长率在总量中的占比。例如,2021 年的总增长率达到最高值,显示出在这一年各项指标的显著增长。
  • 改进建议: 在每个柱子上添加具体数值标签,帮助读者快速获取精确数据。

3 数据分布可视化

3.1 案例数据解释与展示

  • 该数据记录了从1980年到2017年的某些人口统计指标。

    3.1.0.1 变量意义

    1. 年份:记录数据的年份。

    2. 出生率:表示每年的出生率,通常以千分比表示。

    3. 死亡率:表示每年的死亡率,通常以千分比表示。

    4. std.出生率:标准化后的出生率,用于使不同年份的出生率在同一尺度上进行比较。

    5. std.死亡率:标准化后的死亡率,用于使不同年份的死亡率在同一尺度上进行比较。

# 加载必要包
library(tidyverse)
library(ggridges)
library(viridis)
library(dplyr)

# 读取数据
data2 <- read_csv("C:/Users/De16a/Desktop/第五章/人口统计.csv",locale = locale(encoding = "GB18030"))
df3 <- data2 |>
  select(年份, 出生率, 死亡率)|>
  mutate(
    std.出生率=scale(出生率),
    std.死亡率=scale(死亡率)
  )

DT::datatable(df3,rownames = FALSE)

3.2 图形2——镜像核密度图

p1<-ggplot(df3)+aes(x=x)+
  geom_density(aes(x='出生率',y=..density..),color="grey50",fill="red",alpha=0.3)+ # 绘制出生率的镜像核密度图(上图)
  geom_label(aes(x=median('出生率'),y=0.5),label="出生率",color="red")+  # 添加标签
   geom_density(aes(x='死亡率',y=-..density..),color="grey50",fill="blue",alpha=0.3)+ # 绘制死亡率的镜像核密度图(下图)
   geom_label(aes(x=median('死亡率'),y=-0.4),label="死亡率",color="blue")+  # 添加标签
   xlab("指标值")+ggtitle("(a) 原始数据的镜像核密度图")

p2<-ggplot(df3)+aes(x=x)+
  geom_density(aes(x='std.出生率',y=..density..),color="grey50",fill="red",alpha=0.3)+ # 绘制出生率的镜像核密度图(上图)
  geom_label(aes(x=0.6,y=0.8),label="出生率",color="red")+  # 添加标签
   geom_density(aes(x='std.死亡率',y=-..density..),color="grey50",fill="blue",alpha=0.3)+ # 绘制死亡率的镜像核密度图(下图)
   geom_label(aes(x=0.7,y=-0.5),label="死亡率",color="blue")+  # 添加标签
   xlab("标准化数值")+ggtitle("(b) 标准化数据的镜像核密度图")

grid.arrange(p1,p2,ncol=2)     #组合图形

  • 图形解读:图(a)展示了原始数据中出生率(红色)和死亡率(蓝色)的密度分布,图(b)展示了标准化后的出生率(红色)和死亡率(蓝色)的密度分布。 从图中可以看出,原始数据中出生率的密度分布呈现出一个明显的峰值,而死亡率的密度分布则相对较为平缓。标准化后的数据中,出生率和死亡率的密度分布形态发生了变化,标准化处理使得数据的分布更加对称和易于比较。
  • 改进建议:图中缺少对标准化方法的详细说明,可能会让读者对标准化后的数据理解不足。为了改进这个图表,可以增加对标准化方法的说明,优化颜色对比度和坐标轴标签,并考虑使用交互式图表以便读者可以更详细地探索数据分布。

4 变量关系可视化

4.1 案例数据解释与展示

  • 该数据来源于R语言内置的(USArrests)数据集,记录了美国各州的犯罪率和其他相关指标。这些数据通常用于统计分析和机器学习模型的训练,以研究不同州之间的犯罪率差异及其与人口特征的关系。

  • 变量意义

    1.州名:记录数据的州名。

    2.Murder:每10万人中的谋杀案数量。

    3.Assault:每10万人中的袭击案数量。

    4.UrbanPop:城市人口比例,以百分比表示。

    5.Rape:每10万人中的强奸案数量。

data3 <- read_csv("C:/Users/De16a/Desktop/USArrests.csv") %>%
  rename(State = 1)  # 重命名第一列为"State"

# 创建分面因子变量(示例:按谋杀率高低分组)
df4 <- data3 %>%
mutate(
    Murder_Level = cut(Murder, 
                      breaks = c(-Inf, 8, 12, Inf),
                      labels = c("低谋杀率", "中谋杀率", "高谋杀率")))%>%
  pivot_longer(
    cols = c(Assault, UrbanPop, Rape),
    names_to = "Crime_Type",
    values_to = "Value"
  )

DT::datatable(df4,rownames = FALSE)

4.2 图形3——分组散点图

ggplot(df4, aes(x = Value, y = Murder, color = Crime_Type)) +
  geom_point(size = 3, alpha = 0.7) +
  facet_grid(~ Murder_Level, scales = "free_x") +  # 按谋杀率分面
  scale_color_manual(
    name = "犯罪类型",
    values = c("Assault" = "#E69F00", 
               "UrbanPop" = "#56B4E9", 
               "Rape" = "#CC79A7"),
    labels = c("袭击案件", "城市人口比例", "强奸案")
  ) +
  labs(
    title = "美国各州犯罪数据分布(按谋杀率分组)",
    x = "数值",
    y = "谋杀率(每10万人)"
  ) +
  theme_minimal(base_size = 12) +
  theme(
    strip.text = element_text(face = "bold", size = 12),
    legend.position = "bottom",
    axis.text.x = element_text(angle = 45, hjust = 1)
  )

  • 图形解读:从图中可以看出,袭击案件、城市人口比例和强奸案在不同谋杀率组中的分布情况。例如,在低谋杀率组中,袭击案件和强奸案的数值相对较低,而在高谋杀率组中,这些犯罪类型的数值相对较高。这表明谋杀率与这些犯罪类型之间可能存在一定的相关性。
  • 改进建议:图中的坐标轴标签和图例的设置不够清晰,可能会让读者在理解数据时产生困惑。为了改进这个图表,可以优化坐标轴标签和图例的排版,增加数据点的透明度以避免重叠,并考虑使用交互式图表以便读者可以更详细地探索数据。

5 样本相似性可视化

5.1 案例数据解释与展示

  • 该数据来源于国泰安数据库(CSMAR),记录了多家公司在不同年份的财务和经营指标。具体来说,数据涵盖了不同股票代码对应的公司在2016年至2020年期间的指标。这些数据通常用于金融和经济领域的实证研究,以分析公司绩效、财务健康状况和市场表现等。

  • 变量意义

    股票代码:公司的唯一标识符。

    年份:记录数据的年份。

    证券代码:与股票代码类似,是公司的另一个标识符。

    行业代码:表示公司所属的行业分类。

    Size:公司规模,通常以总资产的自然对数表示。

    Lev:负债比率,表示公司负债占总资产的比例。

    ROA:资产回报率,表示公司资产的盈利能力。

    Cashflow:现金流,表示公司经营活动产生的现金流量。

    FIXED:固定资产比率,表示公司固定资产占总资产的比例。

    Growth:增长率,表示公司收入或利润的增长速度。

    FirmAge:公司年龄,表示公司成立的年数。

    Mshare:市场份额,表示公司在其市场中的份额。

library(gplots)

data4 <- read_excel("C:/Users/De16a/Desktop/实证常用控制变量1.xlsx")
df5<-data4
# 选择需要的变量
selected_vars <- c("Size", "Lev", "ROA", "Cashflow", "Growth")
data_matrix <- as.matrix(df5[, selected_vars])

# 标准化数据
data_matrix_scaled <- scale(data_matrix)

DT::datatable(data_matrix_scaled,rownames = FALSE)

5.2 图形4——热图

heatmap.2(data_matrix_scaled, 
          scale = "row",  # 按行标准化
          keep.dendro = TRUE,  # 保留树状图信息
          trace = "none",  # 不显示追踪线
          col = colorRampPalette(c("blue", "white", "red"))(50),  # 颜色渐变
          margins = c(5, 10),  # 调整边缘大小
          cexRow = 0.7,  # 行标签字体大小
          cexCol = 0.7,  # 列标签字体大小
          main = "Heatmap of Selected Variables")  # 图表标题

  • 图形解读:左侧的彩色条表示行 Z 分数的分布,顶部的树状图表示变量之间的聚类关系,右侧的树状图表示样本之间的聚类关系。热图中的每个单元格使用颜色深浅表示变量值的大小,颜色从蓝色(低值)到红色(高值)渐变。变量包括 Size、Lev、Growth、ROA 和 Cashflow。 从图中可以看出,变量之间存在一定的聚类关系。例如,Size 和 Lev 被聚类在一起,而 Growth、ROA 和 Cashflow 被聚类在一起。这表明这些变量之间可能具有相似的变化模式或相关性。
  • 改进建议:可以增加变量和样本的详细标签,调整颜色对比度,并考虑使用交互式热图以便读者可以悬停查看具体数值。

6 时间序列可视化

6.1 案例数据解释与展示

  • 该数据来源于历史农业经济统计年鉴,记录了从1867年到1947年这81年间一些与农业相关的经济指标。

  • 变量意义解释:

    Year(年份):表示数据记录的年份

    Corn prices(玉米价格):以某种货币单位(可能是美元)表示的玉米每单位(可能是蒲式耳等)的价格。

    Corn supply(玉米供应):表示玉米的供应量,单位可能和玉米价格的单位相对应,如蒲式耳等。

    Farm wages(农场工资):这是农场雇佣劳动力支付的工资水平。

    Hog prices(猪价格):以货币单位表示的猪每单位(可能是磅等)的价格。

    Hog supply(猪供应):表示猪的供应数量。

library(ggstream)

data5<-read.csv("E:/时间序列分析/5/第五章/work55.csv")
df6<-data5

# 将数据从宽格式转换为长格式
df6_long <- df6 %>%
  pivot_longer(
    cols = -Year, # 排除Year列
    names_to = "Indicator", # 新的列名
    values_to = "Value" # 新的值列名
  ) %>%
  mutate(Indicator = factor(Indicator)) # 将指标列转换为因子类型

DT::datatable(df6_long,rownames = FALSE)

6.2 图形5——流线图

ggplot(df6_long, aes(x = Year, y = Value, group = Indicator, fill = Indicator)) +
  geom_stream() +
  labs(title = "Streamgraph of Agricultural Indicators Over Time",
       x = "Year",
       y = "Value",
       fill = "Indicator") +
  theme_minimal()

  • 图形解读:这个图展示了 1870 年到 1950 年间几种农业指标随时间的变化趋势。不同颜色的区域代表不同的指标:玉米价格(Corn.prices,红色)、玉米供应(Corn.supply,绿色)、农场工资(Farm.wages,蓝色)、猪价格(Hog.prices,紫色)、猪供应(Hog.supply,粉色)。 从图中可以看出,不同农业指标在时间序列上的波动和变化趋势。例如,玉米价格和供应量在 1870 年至 1950 年间呈现出一定的波动,但总体趋势较为平稳;而猪价格和供应量的变化则相对较小。农场工资的波动幅度较大,显示出农业劳动力成本的显著变化。
  • 改进建议:可以考虑对数据进行标准化处理,使得不同指标能够在相同的尺度上进行比较。