3 Week 3

3.1 工具总结

一项在可视化工作者中的调查 2018 visualization survey列举出了一些最常用的工具:R、Python、Tableau、D3.js、Adobe Illustrator。

Of the 627 people who filled out the survey, all but 133 indicated they used R, Illustrator or D3 in their data visualization practice with many using some combination of those tools. 
 Source: https://medium.com/p/you-can-design-a-good-chart-with-r-5d00ed7dd18e?_branch_match_id=654159897912656642

Figure 3.1: Of the 627 people who filled out the survey, all but 133 indicated they used R, Illustrator or D3 in their data visualization practice with many using some combination of those tools. Source: https://medium.com/p/you-can-design-a-good-chart-with-r-5d00ed7dd18e?_branch_match_id=654159897912656642

一些 ggplot2 的扩展包:ggvis 和 gganimate(增添动态图)、ggpubr、bbplot( BBC 数据新闻团队提供了一套主题设置)、ggrepel(自动调整标签位置)。

其他一些好用的 JavaScript 库: leaflet(交互地图)、echarts、highcharts、p5.js(processing 在 js 上的实现)

其他工具:

  1. qlik: 试用之后感觉和 Tableau 类似,但分析功能更加完善
  2. Power BI: 微软开发的 BI 工具,和 Excel、Power View、Power Pivot 协作的功能比较完善,但其使用的 DAX 语法适用面有些窄
  3. Datawrapper: 基于网页在线创建的图表工具
  4. venngage: 主要用于做信息图

3.2 案例:城市 PM2.5

Source: https://www.kaggle.com/uciml/pm25-data-for-five-chinese-cities/download

数据集包含 2010 年至 2015 年北京、上海、广州、成都和沈阳五个城市的 PM2.5 细颗粒物指数及其他相关测量指标,出自 Liang, X., S. Li, S. Zhang, H. Huang, and S. X. Chen (2016), PM2.5 data reliability, consistency, and air quality assessment in five Chinese cities, J. Geophys. Res. Atmos., 121, 10220–10236

导入数据:

各变量分别为:

  • No: 行标签
  • yearmonthdayhourseason: 标志该条纪录的日期
  • PM: 直径小于等于 2.5 微米的颗粒物浓度(\(ug/m^3\))
  • DEWP: 露点温度,即空气中所含的气态水达到饱和而凝结成液态水所需要降至的温度。(摄氏度)
  • HUMI: 湿度
  • TEMP: 温度(摄氏度)
  • PRES: 压强(\(hPa\))
  • cdwd: 组合风向(combined wind direction)
  • lws: 累计风速(cumulative wind speed)
  • precipitation: 每小时降水量(\(mm\))
  • Iprec: 累积降水量

3.2.1 预处理

## # A tibble: 8,760 x 18
##       No  year month   day  hour season PM_Dongsi PM_Dongsihuan
##    <dbl> <int> <int> <int> <int> <chr>      <dbl>         <dbl>
##  1 43825  2015     1     1     0 4              5            32
##  2 43826  2015     1     1     1 4              4            12
##  3 43827  2015     1     1     2 4              3            19
##  4 43828  2015     1     1     3 4              4             9
##  5 43829  2015     1     1     4 4              3            11
##  6 43830  2015     1     1     5 4              3            18
##  7 43831  2015     1     1     6 4              3            20
##  8 43832  2015     1     1     7 4              3            22
##  9 43833  2015     1     1     8 4             NA            NA
## 10 43834  2015     1     1     9 4              5            37
## # ... with 8,750 more rows, and 10 more variables: PM_Nongzhanguan <dbl>,
## #   PM_US_Post <dbl>, DEWP <dbl>, HUMI <dbl>, PRES <dbl>, TEMP <dbl>,
## #   cbwd <chr>, Iws <dbl>, precipitation <dbl>, Iprec <dbl>

对于这里的分析(20015 年北京市数据),行索引 No 属于冗余变量,将它们从数据中去除:

yearmonthday 统一为一个日期变量:

将季节变量 Season 重新编码:

在北京市的数据集中,PM_DOngsiPM_DongsihuanPM_Nongzhanguan 分别代表东四十条、、和农业展览馆三个测量点的观测值,由中国生态环境部负责。PM_US_Post来自美国使馆数据。可见 http://aqicn.org/city/beijing/dongchengdongsi/cn/

聚合上面提到的四列,并移除带有缺失值的观测:

整理数据结果:

## # A tibble: 28,506 x 12
##    date                season Region    PM  DEWP  HUMI  PRES  TEMP cbwd 
##    <dttm>              <fct>  <chr>  <dbl> <dbl> <dbl> <dbl> <dbl> <chr>
##  1 2015-01-01 00:00:00 Winter Dongsi     5   -21    29  1034    -6 SE   
##  2 2015-01-01 01:00:00 Winter Dongsi     4   -22    23  1034    -4 NW   
##  3 2015-01-01 02:00:00 Winter Dongsi     3   -21    27  1034    -5 NW   
##  4 2015-01-01 03:00:00 Winter Dongsi     4   -21    29  1035    -6 NW   
##  5 2015-01-01 04:00:00 Winter Dongsi     3   -21    27  1034    -5 NW   
##  6 2015-01-01 05:00:00 Winter Dongsi     3   -22    23  1034    -4 NW   
##  7 2015-01-01 06:00:00 Winter Dongsi     3   -23    22  1034    -5 NW   
##  8 2015-01-01 07:00:00 Winter Dongsi     3   -22    26  1035    -6 SE   
##  9 2015-01-01 09:00:00 Winter Dongsi     5   -22    24  1035    -5 NE   
## 10 2015-01-01 10:00:00 Winter Dongsi     4   -22    21  1035    -3 NE   
## # ... with 28,496 more rows, and 3 more variables: Iws <dbl>,
## #   precipitation <dbl>, Iprec <dbl>

3.2.2 PM 2.5 测量的分布

原论文 的一个研究主题是中国生态环境局 PM 2.5 测量数据的可靠性(与美国使馆发布数据相比),故本节主要关注 PM 在四个测量来源上的分布情况对比。

以季节为分组变量,考察四个位点上 PM 2.5 测量值的分布情况:

山脊图显示,除了秋季(10,、11 和 12 月)以外,PM 2.5 的测量值在四个位点上的分布至少没有显著差异。秋季的这种例外可能是由于样本数过少导致———— 原文中提到,2015 年 10 月以后东四环测量点有超过 85 % 的缺失值,在数据预处理中,这些观测均被移除了。

另外一种呈现方式: 小提琴图 + 箱线图 + 散点图

下面,考虑不同季节内各个测量点的 PM 2.5 平均值的差异,首先得到所需数据:

## # A tibble: 16 x 3
## # Groups:   Region [4]
##    Region       season  mean
##    <chr>        <fct>  <dbl>
##  1 Dongsi       Spring    78
##  2 Dongsi       Summer    62
##  3 Dongsi       Fall      82
##  4 Dongsi       Winter   123
##  5 Dongsihuan   Spring    85
##  6 Dongsihuan   Summer    61
##  7 Dongsihuan   Fall      41
##  8 Dongsihuan   Winter   131
##  9 Nongzhanguan Spring    78
## 10 Nongzhanguan Summer    54
## 11 Nongzhanguan Fall      83
## 12 Nongzhanguan Winter   122
## 13 US_Post      Spring    76
## 14 US_Post      Summer    52
## 15 US_Post      Fall      76
## 16 US_Post      Winter   120

绘图:

3.2.3 其他工具

3.2.3.1 plotly

plot.js、D3.js、hightcharts.js 等 JavaScript 库 提供了创建动态、交互图形的简洁语法,这是 ggplot2 的弱点,因为 The grammer of graphics 并没有描述动态成分在图形语法中的地位,不过这几年逐渐完善的 gganimation 包似乎改善了这一点,很多 JS 库也提供了 R 语言的接口。

下面是一个用 plotly 绘制的简单散点图 (PM 与湿度,随机选取 500 个样本点):

3.2.3.2 python

这里只对各个地点 PM 测量作一个简单的直方图(使用原始数据):

A simple histogram using seaborn

Figure 3.2: A simple histogram using seaborn

大图可见: https://nbviewer.jupyter.org/github/enixam/Advanced_ggplot2/blob/master/bj.ipynb

个人感觉基于 matplotlib 的 python 可视化库往往有一些通病:如函数、参数的命名规范比较混乱,类似 ggplot2 中的主题设置比较繁琐。最重要的,核心的创建子图的语法经常不符合 tidy data 的要求。

3.2.3.3 Tableau

数据处理和较为进阶的分析功能是 Tableau 的最大短板,可能需要先在 R、 Python 中整理好数据,随后才能在 Tableau 中完成可视化。

呈现:

https://public.tableau.com/profile/qiushi1969#!/vizhome/beijing_PM/Sheet1?publish=yes