Data Visualisation

A course offered in 2019-2020 semester 2 (Spring semester) by Southwest University. Below is an archive of my lab report. Contents were recorded in simplified Chinese.

数据可视化实验一

实验基本信息

姓名:朱一帆

学号:22018321212058

班级:2018级计算机科学与技术(智能科学与技术方向)


一、实验目的

2019年12月以来,湖北省武汉市出现多起病毒性肺炎病例。在2020年1月份,该病毒在中国出现大规模传染现象。1月12日,世界卫生组织将新型冠状病毒命名为2019-nCov。3月,疫情呈现全球化蔓延趋势。本文主要聚焦于中国,观察中国自一月份到三月份的疫情状况。

本实验报告收集了2020年1月20日-3月31日的中国新型冠状病毒相关统计数据,将使用数据可视化的方法对收集到的抽象数据具体化,使用图表的形式进行展示,并根据所得到的信息进行分析。


二、实验要求

  1. 搜集并整理从1月20日至2月29日的全国疫情数据在“*.csv”表格中,需要这样几个字段:累计确诊病例数、累计出院病例数、累计死亡病例数、疑似病例数。

  2. 用本章所学习函数,作出以下折线图,要求:

    • 横坐标标签、纵坐标标签、每张图的title;

    • 横纵坐标的刻度;

    • 不同线条的颜色、线形、粗细、点形状等;

    • 根据上述图形进行分析,对已经发生的状况进行总结,对未来的发展趋势进行预测。

  3. 用R Markdown完成上述报告,需要交*.rmd和*.pdf(或者*.html)。

  4. 涉及知识点:R语言的绘图知识,高级绘图函数plot()函数的使用以及相关参数,低级绘图函数lines()的使用。以及数据框的读取和类型转换等操作。


三、实验内容与设计

1. 问题的背景

2019冠状病毒病疫情,是由严重急性呼吸系统综合症冠状病毒2型(SARS-CoV-2)所引发的全球大流行疫情。疫情在2019年冬首次暴发于中华人民共和国湖北省武汉市,随后在2020年初迅速扩散至全球多国,逐渐变成一场全球性大瘟疫。截至2020年4月,全球已有200多个国家和地区累计报告超过200万名确诊病例,导致超过13万名患者死亡。

1月20日,中国国家卫健委发布公告,新型冠状病毒感染的肺炎纳入法定乙类传染病,采取甲类传染病的预防、控制措施(简称乙类传染病甲类管理)。3月9日,世界卫生组织认为,新型冠状肺炎疫情构成全球性大流行的威胁“非常真实”。3月11日,世界卫生组织宣布,此次疫情已构成“全球大流行”。

2. 数据准备

中华人民共和国国家卫生健康委员会对新型冠状病毒感染的肺炎疫情情况做了每日统计。本文信息数据来自国家卫生健康委员会官方网站http://www.nhc.gov.cn。 收集到的数据一共有九个字段,分别为:日期、新增确诊病例数、累计确诊病例数、新增疑似病例数、累计疑似病例数、新增死亡病例数、累计死亡病例数、新增治愈数、累计出院数。数据主要来自于全国31个省(自治区、直辖市)和新疆生产建设兵团。

接下来将数据导入到数据框中,查看各个列的数据类型,并将所有数据类型转化为所需要的正确类型。

virusdata.df <- read.csv("C:\\Users\\lenovo\\Desktop\\report1\\新型冠状病毒统计数据.csv")
str(virusdata.df)
## 'data.frame':    72 obs. of  9 variables:
##  $ Date           : Factor w/ 72 levels "2020年1月20日",..: 1 2 3 4 5 6 7 8 9 10 ...
##  $ Newly.diagnosed: num  77 149 131 259 444 ...
##  $ diagnosed      : num  291 440 571 830 1287 ...
##  $ Newly.suspected: num  27 82 257 680 1118 ...
##  $ Suspected      : num  54 136 393 1072 1965 ...
##  $ Newly.dead     : num  0 9 8 8 16 15 24 26 26 38 ...
##  $ Dead           : num  0 9 17 25 41 56 80 106 132 170 ...
##  $ Newly.recover  : num  0 0 0 0 3 11 2 9 43 21 ...
##  $ Recover        : num  0 0 0 34 38 49 51 60 103 124 ...

3. 分析过程

选取的数据范围为1月20日至3月31日共72天的数据情况。将1月20日定为数据的第一天,以此向后递推。

1). 下面的图示为累计确诊病例数和累计疑似病例数的变化趋势图。

图1 累计确诊数和疑似病例数对照图

可以看出,疑似病例数量线上升后下降,在前20天呈现逐步上升的趋势,疑似病例数的峰值在第20天(2月8日),后迅速下降,在后期定在一个较小的值。确诊病例数在逐渐攀升,增速在第25—27天左右最快,后增速放缓,逐渐保持在一个稳定的值。

2). 接下来展示新增确诊病例数和新增疑似病例数的变化趋势图。

图2 新增确诊数和新增疑似病例数对照图

由图可以直观地看出,新增确诊人数在q前期不断攀升,在第24天(2月12日)有个极高的峰值,后渐渐趋于平稳。新增疑似病例数在前20天内不断增加,后渐渐减少,逐渐趋于平稳。

3). 对于确诊人数的比较,下图为新增确诊病例数和累计确诊比例数的变化趋势图。

图3 新增确诊数和累计确诊病例数对照图

新增确诊病例数越多,确诊病例增长的越快,符合常识。确诊病例数曲线符合生物学中种群变化的K型曲线,即增长速度先逐渐变快,后达到最大,最后增长速度逐渐放缓,趋向稳定。新增确诊病例数可以形象地看做速度变化曲线。

4). 接下来统计治愈患者和死亡病例数。

图4 累计治愈数和累计死亡数对照图

前期的死亡数和治愈数差别不大,后期治愈数增长迅速,死亡数处于平稳。

5). 最后统计新增治愈和新增死亡数的变化趋势图。

图5 新增治愈数和新增死亡数对照图

新增治愈数基本都高于新增死亡数。新增治愈数在第39天达到最大,而新增死亡数保持在一个稳定的水平。

4. 结论

由以上统计分析可以得到基本的结论。在病毒爆发前期,确诊病例和疑似病例在不断快速攀升,渐渐达到峰值。刚开始的死亡数和治愈数基本持平。在2月12日,由于《新型冠状病毒感染的肺炎诊疗方案(试行第五版)》在湖北省的病例诊断分类中增加了“临床诊断,临床诊断病例为疑似病例具有肺炎影像学特征者,2月12日的统计把临床诊断病例增加为确诊病例,所以出现了确诊人数激增的状况。当时间推进到30天以后(约2月底)时,累计确诊病例数逐渐稳定在八万人,每日新增也渐渐减少;疑似病例数也大幅度下降,达到一个非常低的水平,新增水平与新增确诊病例大致相同。在治愈方面,治愈人数大幅度上升,新增出院人数也保持较高增长。死亡数一直维持在较低水平,新增死亡数也一直处于较低水平。

目前中国疫情形势有持续向好态势,确诊人数和疑似人数基本平稳,治愈人数远大于死亡人数,可以预测在不久的将来疫情能够得到控制。这一切得益于奋战在前线的医务工作者以及无私奉献的国内外社会各界人士。在疫情形势全球化的当下,望所有人注意防护,全球共同携手度过难关。

作业三:类别变量可视化

一、题目要求

  1. 对于如下二维列联表,作出:

    • 并列条形图;

    • 堆叠条形图;

    • 调用sjp包中的plot_xtab函数;

    • 二维关联图。

  2. 题目信息

    家庭经济状况属于上、中、下的高三毕业生,对于是否愿意报考师范大学有三种不同的态度(愿意、不愿意、未定)。

表1 学生对报考师范大学的态度与经济状况之间的关系
家庭经济状况 愿意 不愿意 未定
18 27 10
20 19 20
18 7 11

二、代码和运行结果

table3 <- read.csv("C:\\Users\\lenovo\\Desktop\\数据可视化\\data\\mydata\\chap03\\data3_homework.csv",header = FALSE)
mat3 <- as.matrix(table3)
rownames(mat3) <- c("上","中","下")
colnames(mat3) <- c("愿意","不愿意","未定")
mat3
##    愿意 不愿意 未定
## 上   18     27   10
## 中   20     19   20
## 下   18      7   11
barplot(mat3,xlab = "对于报考师范大学的态度",
        ylab = "人数",
        col = rainbow(3,start=0,end=2/6),
        beside = TRUE,
        legend = row.names(mat3),
        args.legend = c(x=12,y=35),
        ylim = c(0,35),
        main = "(1) 并列条形图")
text(x=c(1.5,2.5,3.5,5.5,6.5,7.5,9.5,10.5,11.5),
     y=mat3+1.5,labels = mat3)

barplot(mat3,xlab = "对于报考师范大学的态度",
        ylab = "人数",
        col = rainbow(3,start = 2/6,end = 4/6),
        beside = FALSE,
        legend = row.names(mat3),
        args.legend = c(x=3.5,y=75),
        ylim=c(0,80),
        main = "(2) 堆叠条形图")
text(x=c(.7,.7,.7,1.9,1.9,1.9,3.1,3.1,3.1),
     y=c(10,30,47,13,39,49,5,22,38),
     labels = mat3)

assocplot(mat3,col=c("green","yellow"),
          main="(3) 二维关联图")

#install.packages("sjPlot")
library(sjPlot)
## Warning: package 'sjPlot' was built under R version 3.6.3

set_theme(geom.label.size = 3)
data3 <- read.csv("C:\\Users\\lenovo\\Desktop\\数据可视化\\data\\mydata\\chap03\\data3_homework2.csv")
plot_xtab(data3$态度,data3$经济状况,
          bar.pos="dodge",show.n=TRUE,
          show.prc=TRUE,show.summary=TRUE,
          title="(4) sjPlot并列条形图")

plot_xtab(data3$态度,data3$经济状况,
          bar.pos="stack",show.n=TRUE,
          show.prc=TRUE,show.summary=TRUE,
          title="(5) sjPlot堆叠条形图")

三、总结

1. 通过使用barplot()能够对类别变量进行条形图可视化。
2. 条形图分为并列条形图和堆叠条形图。
3. sjPlot包的安装使用。
4. 二维关联图函数assocplot()的使用。
5. 由plot_xtab()函数中的summary可以得知,*p = 0.033 < 0.05,说明学生是否愿意报考师范大学与家庭经济状况有关系。
作业四:分布特征可视化

一、题目要求

  1. 针对mtcars$mpg做直方图,叠加轴须图、核密度曲线

  2. 针对mtcars$mpg,mtcars$disp,做叠加的直方图

  3. 针对mtcars$mpg,mtcars$cyl做条件直方图, epade包中的histogram.ade, plotrix包中的histStack(堆叠的直方图)。

  4. 单个数值数据mtcars$mpg的核密度曲线(曲线下阴影) 添加正态曲线

  5. 多个数值数据的核密度曲线在同一个图中, 短格式转长格式(melt函数), 用条件核密度画, mtcars$mpg,mtcars$disp,mtcars$hp

  6. 一个数值数据~group,条件核密度图. mtcars$mpg ~ mtcars$cyl

  7. mtcars$mpg~mtcars$cyl, 做箱线图,做小提琴图

  8. 在一个图上,上面的2/3高度画一个mtcars$mpg数据的直方图, 下面的1/3高度画mtcars$mpg的箱线图(横向), 画出五个分位数对应的垂直线


二、代码及运行结果

  1. 加载数据集mtcars。
data("mtcars")
mtcars
##                      mpg cyl  disp  hp drat    wt  qsec vs am gear carb
## Mazda RX4           21.0   6 160.0 110 3.90 2.620 16.46  0  1    4    4
## Mazda RX4 Wag       21.0   6 160.0 110 3.90 2.875 17.02  0  1    4    4
## Datsun 710          22.8   4 108.0  93 3.85 2.320 18.61  1  1    4    1
## Hornet 4 Drive      21.4   6 258.0 110 3.08 3.215 19.44  1  0    3    1
## Hornet Sportabout   18.7   8 360.0 175 3.15 3.440 17.02  0  0    3    2
## Valiant             18.1   6 225.0 105 2.76 3.460 20.22  1  0    3    1
## Duster 360          14.3   8 360.0 245 3.21 3.570 15.84  0  0    3    4
## Merc 240D           24.4   4 146.7  62 3.69 3.190 20.00  1  0    4    2
## Merc 230            22.8   4 140.8  95 3.92 3.150 22.90  1  0    4    2
## Merc 280            19.2   6 167.6 123 3.92 3.440 18.30  1  0    4    4
## Merc 280C           17.8   6 167.6 123 3.92 3.440 18.90  1  0    4    4
## Merc 450SE          16.4   8 275.8 180 3.07 4.070 17.40  0  0    3    3
## Merc 450SL          17.3   8 275.8 180 3.07 3.730 17.60  0  0    3    3
## Merc 450SLC         15.2   8 275.8 180 3.07 3.780 18.00  0  0    3    3
## Cadillac Fleetwood  10.4   8 472.0 205 2.93 5.250 17.98  0  0    3    4
## Lincoln Continental 10.4   8 460.0 215 3.00 5.424 17.82  0  0    3    4
## Chrysler Imperial   14.7   8 440.0 230 3.23 5.345 17.42  0  0    3    4
## Fiat 128            32.4   4  78.7  66 4.08 2.200 19.47  1  1    4    1
## Honda Civic         30.4   4  75.7  52 4.93 1.615 18.52  1  1    4    2
## Toyota Corolla      33.9   4  71.1  65 4.22 1.835 19.90  1  1    4    1
## Toyota Corona       21.5   4 120.1  97 3.70 2.465 20.01  1  0    3    1
## Dodge Challenger    15.5   8 318.0 150 2.76 3.520 16.87  0  0    3    2
## AMC Javelin         15.2   8 304.0 150 3.15 3.435 17.30  0  0    3    2
## Camaro Z28          13.3   8 350.0 245 3.73 3.840 15.41  0  0    3    4
## Pontiac Firebird    19.2   8 400.0 175 3.08 3.845 17.05  0  0    3    2
## Fiat X1-9           27.3   4  79.0  66 4.08 1.935 18.90  1  1    4    1
## Porsche 914-2       26.0   4 120.3  91 4.43 2.140 16.70  0  1    5    2
## Lotus Europa        30.4   4  95.1 113 3.77 1.513 16.90  1  1    5    2
## Ford Pantera L      15.8   8 351.0 264 4.22 3.170 14.50  0  1    5    4
## Ferrari Dino        19.7   6 145.0 175 3.62 2.770 15.50  0  1    5    6
## Maserati Bora       15.0   8 301.0 335 3.54 3.570 14.60  0  1    5    8
## Volvo 142E          21.4   4 121.0 109 4.11 2.780 18.60  1  1    4    2
  1. 针对mtcars$mpg做直方图,叠加轴须图、核密度曲线.
hist(mtcars$mpg,labels = TRUE,ylim = c(0,0.085),
     probability = TRUE,xlab = "每英里油耗",ylab = "密度",
     main = "(1) 每英里油耗的直方图",col = "yellow")
rug(jitter(mtcars$mpg))
lines(density(mtcars$mpg),col = "green")

  1. 针对mtcars$mpg,mtcars$disp,做叠加的直方图。由于disp的数值较大,对其数值进行缩小十倍,才能在同一张图中表现出来。
hist(mtcars$mpg,labels = TRUE,xlim = c(5,50),
     ylim = c(0,0.085),probability = TRUE,
     xlab = "指标",ylab = "密度",
     main = "(2) 每英里油耗和排量的叠加直方图",
     col = "green",density = 100)

hist(mtcars$disp/10,labels = TRUE,probability = TRUE,
     xlab = "",ylab = "",main = "",
     col = "blue",density = 20,add = TRUE)
legend("topright",legend = c("mpg","disp"),
       density = c(100,20),fill = c("green","blue"))

  1. 针对mtcars$mpg,mtcars$cyl做条件直方图,epade包中的histogram.ade,plotrix包中的histStack(堆叠的直方图)。
#install.packages("epade")
library(epade)
## Warning: package 'epade' was built under R version 3.6.3
## Loading required package: plotrix
## Warning: package 'plotrix' was built under R version 3.6.3
histogram.ade(mtcars$mpg,group = mtcars$cyl,ylim = c(0,0.3),
              main = "(3) 每英里油耗与气缸数的条件直方图",
              xlab = "每英里油耗",ylab = "密度")

#install.packages("plorix")
library(plotrix)
mtcars$cyl <- as.factor(mtcars$cyl)
histStack(mpg~cyl,data = mtcars,xlab = "每英里油耗",
          ylab = "频数",
          main = "(4)每英里油耗与气缸数的堆叠直方图",
          legend.pos = "topright")

  1. 单个数值数据mtcars$mpg的核密度曲线(曲线下阴影),添加正态曲线。
d = density(mtcars$mpg)
plot(d,xlab = "每英里油耗",ylab = "密度",main = "(5)每英里油耗的核密度曲线")
polygon(d,col = "gray90",border = "blue")
x <- c(0:40)
lines(dnorm(x,mean = mean(mtcars$mpg),sd = sd(mtcars$mpg)),col = "red")

  1. 多个数值数据的核密度曲线在同一个图中, 短格式转长格式(melt函数), 用条件核密度画, mtcars$mpg,mtcars$disp,mtcars$hp
#install.packages("reshape")
library(reshape)
## Warning: package 'reshape' was built under R version 3.6.3
d <- mtcars[,c(1,3:4)]
mycar <- melt(d,id.vars = NULL,
              variable.name = "指标",value.name = "指标值") 

#install.packages("sm")
library(sm)
## Warning: package 'sm' was built under R version 3.6.3
## Package 'sm', version 2.2-5.6: type help(sm) for summary information
cols <- c("red","green","blue")
sm.density.compare(mycar$value,mycar$variable,xlab = "指标",ylab = "密度",
                   col = cols)
legend("topright",legend = levels(mycar$variable),fill = cols)
mtext("(6) 多个数值的核密度曲线",side = 3,cex = 1.2,font = 2)

  1. 一个数值数据~group,条件核密度图. mtcars$mpg ~ mtcars$cyl
cols = c("coral","gold","yellow")
cdplot(cyl~mpg,data = mtcars,col = cols,xlab = "每英里油耗",ylab = "气缸数")
mtext("(7) 每英里油耗与气缸数的条件核密度图",side = 3,cex = 1.2,font = 2)

  1. mtcars$mpg~mtcars$cyl, 做箱线图,做小提琴图
boxplot(mpg~cyl,data = mtcars,xlab = "气缸数",ylab = "每英里油耗",
        main = "(8) 每英里油耗与气缸数的箱线图",col = "yellow")

#install.packages("vioplot")
library(vioplot)
## Warning: package 'vioplot' was built under R version 3.6.3
## Loading required package: zoo
## Warning: package 'zoo' was built under R version 3.6.3
## 
## Attaching package: 'zoo'
## The following objects are masked from 'package:base':
## 
##     as.Date, as.Date.numeric

mpg1 <- mtcars[mtcars$cyl==4,]
mpg2 <- mtcars[mtcars$cyl==6,]
mpg3 <- mtcars[mtcars$cyl==8,]
vioplot(mpg1$mpg,mpg2$mpg,mpg3$mpg,names = c("4","6","8"),
        xlab = "气缸数",ylab = "每英里油耗",
        main = "(9) 每英里油耗与气缸数的小提琴图")

  1. 在一个图上,上面的2/3高度画一个mtcars$mpg数据的直方图, 下面的1/3高度画mtcars$mpg的箱线图(横向), 画出五个分位数对应的垂直线。
layout(matrix(c(1,2),nc = 1),heights = c(2,1))
par(mai = c(0,0.52,0.2,0.1),cex = 0.7)
hist(mtcars$mpg,labels = TRUE,ylim = c(0,0.085),
     probability = TRUE,col = "lightblue",
     main = "(10) 每英里油耗的直方图和箱线图",
     xlab = "每英里油耗",ylab = "密度")
points(quantile(mtcars$mpg),c(0,0,0,0,0))
abline(v = quantile(mtcars$mpg))

par(mai = c(0.35,0.59,0,0.18),cex = 0.7)
boxplot(mtcars$mpg,horizontal = TRUE,lwd = 2,col = "lightgreen")
abline(v = quantile(mtcars$mpg))


三、总结

  1. 数据的分布特征主要是指分布的形状是否对称、分布中是否存在离群点、分布偏斜的方向和程度等。

  2. 直方图与核密度图用来观察数据分布特征,直方图用函数hist()来绘制。直方图可以添加轴须线、核密度曲线、正态分布曲线等信息。核密度图主要是绘制平滑的曲线来观察数据分布的大致形状。又分为分类核密度图和条件核密度图。

  3. 箱线图和小提琴图主要分析比较多个变量的分布。箱线图使用函数boxplot(),小提琴图使用函数vioplot()。箱线图主要展示了上下相邻值、上下四分位数、中位数和离群点等信息,小提琴图将核密度曲线与箱线图相结合,显示数据分布的大致形状。

Leave a Comment

Your email address will not be published. Required fields are marked *

Index
Scroll to Top