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

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
      日期                 编码            名称                开盘        
 Min.   :2024-01-02   Min.   :600030   Length:968         Min.   :   4.77  
 1st Qu.:2024-04-03   1st Qu.:600035   Class :character   1st Qu.:  14.84  
 Median :2024-07-04   Median :600278   Mode  :character   Median :  30.52  
 Mean   :2024-07-04   Mean   :600496                      Mean   : 407.97  
 3rd Qu.:2024-10-08   3rd Qu.:600739                      3rd Qu.: 346.40  
 Max.   :2024-12-31   Max.   :601398                      Max.   :1910.00  
      收盘              最高              最低             成交量        
 Min.   :   4.78   Min.   :   4.83   Min.   :   4.72   Min.   :   10321  
 1st Qu.:  14.86   1st Qu.:  15.10   1st Qu.:  14.67   1st Qu.:  260461  
 Median :  30.49   Median :  31.00   Median :  30.12   Median :  696534  
 Mean   : 407.86   Mean   : 412.18   Mean   : 404.07   Mean   : 1391528  
 3rd Qu.: 345.25   3rd Qu.: 349.50   3rd Qu.: 340.93   3rd Qu.: 2270208  
 Max.   :1770.00   Max.   :1910.00   Max.   :1756.68   Max.   :16882262  
     成交额               振幅            涨跌幅            涨跌额         
 Min.   :6.146e+08   Min.   : 0.000   Min.   :-8.5700   Min.   :-127.8500  
 1st Qu.:1.554e+09   1st Qu.: 1.290   1st Qu.:-0.7125   1st Qu.:  -0.2625  
 Median :2.304e+09   Median : 1.780   Median : 0.0000   Median :   0.0000  
 Mean   :3.261e+09   Mean   : 2.142   Mean   : 0.1135   Mean   :  -0.1855  
 3rd Qu.:3.924e+09   3rd Qu.: 2.502   3rd Qu.: 0.8100   3rd Qu.:   0.2000  
 Max.   :4.220e+10   Max.   :13.770   Max.   :10.0100   Max.   : 130.0000  
     换手率       
 Min.   : 0.0500  
 1st Qu.: 0.1600  
 Median : 0.2600  
 Mean   : 0.4649  
 3rd Qu.: 0.4700  
 Max.   :11.1000  
[1] 0
# A tibble: 4 × 7
    编码 名称     交易日数 起始日期   结束日期   平均收盘价 平均成交量
   <int> <chr>       <int> <date>     <date>          <dbl>      <dbl>
1 600030 中信证券      242 2024-01-02 2024-12-31      22.1    1328403.
2 600036 招商银行      242 2024-01-02 2024-12-31      34.0     696437.
3 600519 贵州茅台      242 2024-01-02 2024-12-31    1570.       33652.
4 601398 工商银行      242 2024-01-02 2024-12-31       5.72   3507623.

         中信证券 招商银行 工商银行 贵州茅台
中信证券        1       NA       NA       NA
招商银行       NA        1       NA       NA
工商银行       NA       NA        1       NA
贵州茅台       NA       NA       NA        1

2 折线图和面积图

2.1 合并折线图

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

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

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

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

2.2 分面折线图

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

  • 日期截取一整年;

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

2.3 面积图

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

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

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

  • 在数据可视化实践中,深刻体会到图形是数据与洞察之间的桥梁。编写代码时,清晰的逻辑比复杂技巧更重要,每个参数调整都可能改变图表传递的信息。选择合适的图表类型能事半功倍——折线图展现趋势,面积图强调累积,柱状图适合比较。发现数据清洗占大半精力,而美观性需平衡信息密度与视觉舒适度。最关键是始终保持”读者视角”,用最简图形讲清故事,避免过度设计。调试过程常带来意外发现,这正是数据探索的魅力所在。

3 流线图和地平线图

3.1 流线图

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

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

3.2 地平线图

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

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

  • 数据可视化是艺术与科学的融合,编写代码时需兼顾技术精确与视觉表达。流线图的波浪起伏生动呈现交易额变化节奏,而地平线图用色块切割完美捕捉价格波动本质。实践中深刻体会到,参数微调如alpha值和配色选择会彻底改变图表性格,而分面输出则需在统一尺度与个性展示间寻找平衡。最打动人心的图表往往诞生于数据理解与美学直觉的碰撞——当代码逻辑遇上视觉隐喻,冷冰冰的数字便有了温度与故事。调试过程常带来意外发现,这正是数据探索的魅力所在。

4 不规则时间序列图

4.1 数据准备

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

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

4.2 平滑曲线图

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

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

4.3 K线图

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

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

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

  • 在画股票走势图的过程中,我慢慢摸索出一些经验。数据清洗往往比画图本身更费时间,特别是处理缺失值和异常值的时候。画图时发现,简单的折线图其实最能清晰展示趋势,太多花哨的效果反而会干扰信息传达。移动平均线是个好东西,能帮我们过滤掉短期波动,看清大方向。K线图虽然专业,但对普通投资者来说可能有点复杂。调代码时经常遇到坐标轴对不齐、图例显示不全这些小问题,需要耐心调试。最深的体会是,好图表不在于多精美,而在于能不能让人一眼看懂数据要表达的故事。