第七章 时间序列可视化课堂练习

Author

kaka

1 案例数据

1.1 all_stock_2024:工商银行、招商应用、中信证券和贵州茅台四个股票2024各天交易数据

  • data为为日期变量,但该日期变量不规则(不连续),周末和公众假期没有交易数据;

  • 编码名称用于识别不同股票,注意不同股票有交易数据日期不一定一致,但本例种各股票均有242个交易日数据;

  • 开盘价到换手率 均为数值变量,开盘价到成交量与每股资产有关,不同股票间不可比;

  • 交易量的单位为手(百股)、成交额的单位为元,振幅等四个变量均为相对指标。

'data.frame':   968 obs. of  13 variables:
 $ 日期  : Date, format: "2024-01-02" "2024-01-03" ...
 $ 编码  : int  600030 600030 600030 600030 600030 600030 600030 600030 600030 600030 ...
 $ 名称  : chr  "中信证券" "中信证券" "中信证券" "中信证券" ...
 $ 开盘  : num  20.4 20 20.1 19.9 19.7 ...
 $ 收盘  : num  20.1 20.2 20 19.8 19.4 ...
 $ 最高  : num  20.4 20.2 20.2 20.2 19.9 ...
 $ 最低  : num  20.1 20 19.8 19.7 19.4 ...
 $ 成交量: int  587765 547514 503918 696148 625671 458458 525961 447933 397471 338558 ...
 $ 成交额: num  1.18e+09 1.10e+09 1.01e+09 1.39e+09 1.22e+09 ...
 $ 振幅  : num  1.67 1.35 1.59 2.6 2.32 1.18 1.9 1.64 1.43 1.84 ...
 $ 涨跌幅: num  -1.47 0.55 -0.89 -1.05 -1.87 0.21 0 0.72 -0.41 -0.2 ...
 $ 涨跌额: num  -0.3 0.11 -0.18 -0.21 -0.37 0.04 0 0.14 -0.08 -0.04 ...
 $ 换手率: num  0.52 0.48 0.44 0.61 0.55 0.4 0.46 0.39 0.35 0.3 ...
        日期   编码     名称  开盘  收盘  最高  最低 成交量     成交额 振幅
1 2024-01-02 600030 中信证券 20.38 20.07 20.40 20.06 587765 1183083968 1.67
2 2024-01-03 600030 中信证券 20.00 20.18 20.25 19.98 547514 1101533870 1.35
3 2024-01-04 600030 中信证券 20.12 20.00 20.16 19.84 503918 1006917540 1.59
4 2024-01-05 600030 中信证券 19.95 19.79 20.18 19.66 696148 1387740195 2.60
5 2024-01-08 600030 中信证券 19.72 19.42 19.86 19.40 625671 1222235532 2.32
6 2024-01-09 600030 中信证券 19.42 19.46 19.56 19.33 458458  892306220 1.18
  涨跌幅 涨跌额 换手率
1  -1.47  -0.30   0.52
2   0.55   0.11   0.48
3  -0.89  -0.18   0.44
4  -1.05  -0.21   0.61
5  -1.87  -0.37   0.55
6   0.21   0.04   0.40
[1] "中信证券" "招商银行" "工商银行" "贵州茅台"
[1] 600030 600036 601398 600519
# A tibble: 4 × 2
  名称     交易天数
  <chr>       <int>
1 中信证券      242
2 工商银行      242
3 招商银行      242
4 贵州茅台      242
      开盘            收盘            最高            最低      
 Min.   :17.47   Min.   :17.50   Min.   :17.78   Min.   :17.26  
 1st Qu.:18.82   1st Qu.:18.87   1st Qu.:19.02   1st Qu.:18.73  
 Median :19.42   Median :19.44   Median :19.60   Median :19.24  
 Mean   :22.05   Mean   :22.09   Mean   :22.40   Mean   :21.80  
 3rd Qu.:26.12   3rd Qu.:26.35   3rd Qu.:27.10   3rd Qu.:26.07  
 Max.   :36.49   Max.   :34.88   Max.   :36.49   Max.   :34.55  
     成交量             成交额         
 Min.   :  333701   Min.   :6.146e+08  
 1st Qu.:  584266   1st Qu.:1.089e+09  
 Median :  856295   Median :1.676e+09  
 Mean   : 1328403   Mean   :3.341e+09  
 3rd Qu.: 1445890   3rd Qu.:3.642e+09  
 Max.   :13514551   Max.   :4.220e+10  
      开盘            收盘            最高            最低      
 Min.   :27.58   Min.   :27.58   Min.   :27.83   Min.   :27.36  
 1st Qu.:31.89   1st Qu.:31.93   1st Qu.:32.16   1st Qu.:31.56  
 Median :33.65   Median :33.70   Median :33.98   Median :33.30  
 Mean   :33.98   Mean   :34.02   Mean   :34.36   Mean   :33.65  
 3rd Qu.:36.38   3rd Qu.:36.39   3rd Qu.:36.81   3rd Qu.:36.10  
 Max.   :41.37   Max.   :40.00   Max.   :41.37   Max.   :39.30  
     成交量            成交额         
 Min.   : 282378   Min.   :9.012e+08  
 1st Qu.: 485833   1st Qu.:1.614e+09  
 Median : 609654   Median :2.121e+09  
 Mean   : 696437   Mean   :2.384e+09  
 3rd Qu.: 815134   3rd Qu.:2.748e+09  
 Max.   :2973039   Max.   :1.200e+10  
      开盘            收盘            最高            最低      
 Min.   :4.770   Min.   :4.780   Min.   :4.830   Min.   :4.720  
 1st Qu.:5.370   1st Qu.:5.372   1st Qu.:5.410   1st Qu.:5.330  
 Median :5.630   Median :5.645   Median :5.700   Median :5.595  
 Mean   :5.711   Mean   :5.724   Mean   :5.774   Mean   :5.662  
 3rd Qu.:6.080   3rd Qu.:6.105   3rd Qu.:6.150   3rd Qu.:6.037  
 Max.   :6.940   Max.   :6.950   Max.   :7.040   Max.   :6.900  
     成交量             成交额         
 Min.   : 1427081   Min.   :7.668e+08  
 1st Qu.: 2501696   1st Qu.:1.388e+09  
 Median : 3122369   Median :1.787e+09  
 Mean   : 3507623   Mean   :2.032e+09  
 3rd Qu.: 3869306   3rd Qu.:2.233e+09  
 Max.   :16882262   Max.   :1.060e+10  
      开盘           收盘           最高           最低          成交量      
 Min.   :1262   Min.   :1261   Min.   :1274   Min.   :1246   Min.   : 10321  
 1st Qu.:1491   1st Qu.:1491   1st Qu.:1503   1st Qu.:1472   1st Qu.: 22482  
 Median :1568   Median :1568   Median :1582   Median :1553   Median : 28972  
 Mean   :1570   Mean   :1570   Mean   :1586   Mean   :1555   Mean   : 33652  
 3rd Qu.:1675   3rd Qu.:1674   3rd Qu.:1689   3rd Qu.:1662   3rd Qu.: 39077  
 Max.   :1910   Max.   :1770   Max.   :1910   Max.   :1757   Max.   :194709  
     成交额         
 Min.   :1.446e+09  
 1st Qu.:3.624e+09  
 Median :4.559e+09  
 Mean   :5.286e+09  
 3rd Qu.:5.950e+09  
 Max.   :3.511e+10  

# A tibble: 4 × 2
  名称     平均换手率
  <chr>         <dbl>
1 中信证券      1.12 
2 工商银行      0.130
3 招商银行      0.337
4 贵州茅台      0.268
# A tibble: 12 × 2
   月份    月平均收盘价
   <chr>          <dbl>
 1 2024-01         19.9
 2 2024-02         21.1
 3 2024-03         20.6
 4 2024-04         18.5
 5 2024-05         18.9
 6 2024-06         18.4
 7 2024-07         18.7
 8 2024-08         19.0
 9 2024-09         20.2
10 2024-10         27.7
11 2024-11         31.4
12 2024-12         30.6

2 折线图和面积图

2.1 合并折线图

  • 将四只股票的涨跌幅 做作折线图,将四条折线在同一个图形输出;

  • 日期截取2024-9-12024-10-31

  • 添加一条纵轴为0的参考线,采用twodash 的线型;

  • 将图标题改为“合并涨跌幅折线图”。

2.2 分面折线图

  • 将四只股票的收盘 价格做作折线图,将四条折线图分面输出;

  • 日期截取一整年;

  • 并使用ggpol::geom_tshighlight2024-9-12024-10-31 时间段高亮显示

2.3 面积图

  • 将四只股票的收盘 价格做作面积图,将四个面积图分面输出;

  • 将成交量的单位改为万手

2.4 图形观察和代码编写的心得体会

  • 数据筛选:精确选取四只股票2024年的数据,并确保日期格式正确。

  • 可视化设计

    • 采用分面图(facet_wrap)展示不同价格区间的股票,每个子图自动适配y轴刻度

    • 用橙色高亮9-10月关键时段

    • 优化了x轴标签角度和图例位置

  • 核心价值:解决了多股票价格差异大的展示难题,通过分面+自由y轴刻度的方式,使不同量级的股票走势清晰可比,同时保持时间维度一致。

  • 成交量差异:工商银行(1500万手)和中信证券(1000万手)成交量显著高于招商银行(300万手)和贵州茅台(20万手),反映不同股票的市场活跃度和投资者偏好。

  • 代码亮点

    • 使用facet_wrap分面展示四只股票,通过scales="free_y"自动适配不同量纲,避免小成交量股票被淹没。

    • 单位统一(万手转换)和日期格式化(ymd)确保数据准确性。

    • 面积图(收盘价)和柱状图(成交量)的合理选择直观呈现趋势与离散数据。

  • 改进建议:需检查异常时间标签(如2021年),可添加趋势线或事件标注以增强分析深度。

3 流线图和地平线图

3.1 流线图

  • 将四只股票的交易额 做作流线图,将四个面积图分面输出;

  • 将交易额的单位改为亿元

3.2 地平线图

  • 采用ggHoriPlot::geom_horizon函数,对四只股票的交易额 做作地平线图
  • 设置原点为均值origin='mean',输出配色图例

3.3 图形观察和代码编写的心得体会

  • 布局:四只股票垂直排列,从上到下依次是工商银行、贵州茅台、招商银行、中信证券

  • 时间轴:横轴显示4月、7月、10月三个时间节点

  • 颜色编码:使用颜色深浅表示交易额相对于均值的偏离程度(原图未显示但代码中使用RdBu配色)

  • 地平线效果:每个时间点的交易额波动通过”山脊”形状表现

4 不规则时间序列图

4.1 数据准备

  • 通过zoo::rollmean 时间收盘价的5天、10天和20天的移动平均

  • 将日期变量转化为id变量

4.2 平滑曲线图

  • 将四只股票收盘价和3种移动平均的折线图分面输出;

  • 横轴的每隔30天一个刻度,只显示月/日;

4.3 K线图

  • 选择工商银行数据作出,2024年的K线图

  • scale_x_continuous 将横轴坐标刻度转化回日期型

4.4 图形观察和代码编写的心得体会

  • 数据准备

    • 确保日期为 Date 类型,股价数据为数值型。

    • 使用 zoo::rollmean() 计算移动平均线(5日、10日、20日)。

  • K线绘制

    • 蜡烛主体:用 geom_rect() 绘制开盘-收盘区间(红涨绿跌)。

    • 影线:用 geom_segment() 绘制最高-最低价区间。

  • 横轴优化

    • scale_x_continuous() 将数字索引转换为日期,避免标签重叠。
  • 交互增强

    • 通过 plotly 实现悬停查看、缩放等交互功能。

核心心得

  • 数据准确性是基础(日期、价格格式需正确)。

  • 移动平均线能辅助趋势判断,参数(如 k=5,10,20)可灵活调整。

  • 可视化细节(颜色、标签、布局)直接影响图表可读性。

  • 交互功能(如 ggplotly)能提升数据探索效率。