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

Author

kaka

1 案例数据

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

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

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

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

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

2 折线图和面积图

2.1 合并折线图

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

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

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

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

2.2 分面折线图

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

  • 日期截取一整年;

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

mapping: xmin = ~as.Date("01/09/2024", format = "%d/%m/%Y"), xmax = ~as.Date("31/10/2024", format = "%d/%m/%Y") 
geom_rect: na.rm = FALSE
stat_identity: na.rm = FALSE
position_identity 

2.3 面积图

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

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

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

  • 合并折线图

    2.4.1 图形观察:

    1. 数据展示:折线图展示了四只股票(工商银行、贵州茅台、招商银行、中信证券)在9月1日至11月1日期间的涨跌幅变化趋势。

    2. 涨跌幅范围:纵轴范围为-5%到10%,说明股票的波动幅度较大,贵州茅台和招商银行的波动尤为明显。

    3. 趋势特征

      • 贵州茅台和招商银行的涨跌幅波动剧烈,可能存在短期市场情绪或事件驱动的影响。

      • 工商银行和中信证券的走势相对平缓,体现出蓝筹股或金融股的稳定性。

    4. 关键时间点:10月15日前后,部分股票出现显著涨跌(如贵州茅台可能触底反弹),需结合当时市场新闻分析原因。

      2.4.2 代码编写心得体会(假设使用Python的Matplotlib):

      1. 数据准备

        • 确保日期列转换为datetime格式,方便横轴显示。

        • 使用pandas读取数据,并按日期排序。

      2. 可视化技巧

        • 通过plt.plot()绘制多条折线,并设置不同颜色和标签区分股票。

        • 添加图例(plt.legend())和标题,提高可读性。

        • 调整横轴日期显示密度,避免重叠(如plt.xticks(rotation=45))。

      3. 优化建议

        • 若数据点密集,可添加标记点(marker='o')突出关键日期。

        • 使用seaborn库可进一步美化样式(如网格线、背景色)。

  • 分面折线图

    2.4.3 图形观察

    1. 趋势识别:通过观察图形,可以快速识别数据的趋势,如上升、下降或周期性波动。例如,从你提供的图表中,可以观察到不同股票或指数在一年中的表现趋势。

    2. 异常值检测:图形可以帮助识别数据中的异常值或异常波动,这对于进一步分析和决策至关重要。

    3. 比较分析:通过将多个图形并排放置,可以直观地比较不同数据集之间的差异和相似性。

    4. 数据分布:图形可以展示数据的分布情况,如集中趋势、离散程度等,这对于理解数据的整体特征非常有帮助。

    5. 直观理解:图形提供了一种直观的方式来理解复杂的数据关系,使得非专业人士也能够快速把握数据的要点。

    2.4.4 代码编写

    1. 精确控制:通过编写代码,可以精确控制图形的各个方面,包括颜色、标签、图例等,从而制作出符合特定需求的图形。

    2. 自动化处理:代码可以自动化处理大量数据,生成图形,这对于处理大数据集尤其有用。

    3. 可重复性:代码的可重复性意味着你可以轻松地重新生成图形,这对于验证结果和分享分析过程非常重要。

    4. 灵活性:代码允许你灵活地调整分析方法和图形类型,以适应不同的数据和分析需求。

    5. 学习曲线:编写代码可能需要一定的学习曲线,但一旦掌握,它将极大地提高你的数据分析能力。

  • 面积图

    2.4.5 图形观察

    1. 数据趋势:图形可以直观地展示数据随时间的变化趋势。例如,从你提供的图表中,我们可以观察到工商银行、贵州茅台、招商银行和中信证券的成交量随时间的变化。

    2. 异常检测:图形可以帮助我们快速识别数据中的异常点或异常波动,这对于发现潜在的问题或机会至关重要。

    3. 模式识别:通过图形,我们可以识别数据中的模式,如周期性波动、季节性变化等。

    4. 比较分析:将多个图形并排放置,可以直观地比较不同数据集之间的差异和相似性,这有助于我们理解不同变量之间的关系。

    5. 数据分布:图形可以展示数据的分布情况,如集中趋势、离散程度等,这对于理解数据的整体特征非常有帮助。

    2.4.6 代码编写

    1. 精确控制:通过编写代码,可以精确控制图形的各个方面,包括颜色、标签、图例等,从而制作出符合特定需求的图形。

    2. 自动化处理:代码可以自动化处理大量数据,生成图形,这对于处理大数据集尤其有用。

    3. 可重复性:代码的可重复性意味着你可以轻松地重新生成图形,这对于验证结果和分享分析过程非常重要。

    4. 灵活性:代码允许你灵活地调整分析方法和图形类型,以适应不同的数据和分析需求。

    5. 学习曲线:编写代码可能需要一定的学习曲线,但一旦掌握,它将极大地提高你的数据分析能力。

3 流线图和地平线图

3.1 流线图

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

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

3.2 地平线图

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

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

  • 流线图

    3.3.1 图形观察:

    1. 数据展示:流线图展示了四家上市公司(工商银行、招商银行、贵州茅台、中信证券)在2024年1月至2025年1月期间的成交额变化趋势。

    2. 时间跨度:横轴覆盖了2024年1月、4月、7月、10月和2025年1月五个关键时间节点,纵轴为成交额(亿元)。

    3. 趋势特征

      • 贵州茅台:成交额波动可能较大,尤其在2024年7月至10月期间可能出现峰值,反映其高关注度或市场事件影响。

      • 银行与券商股(工商银行、招商银行、中信证券):成交额相对平稳,但招商银行可能在2024年4月或2025年1月有显著变化,需结合金融政策分析。

    4. 异常点:若某个月份出现成交额骤升或骤降(如2024年10月),需检查是否为财报发布、政策调整或市场情绪波动所致。

    3.3.2 代码编写心得体会(假设使用Python的Matplotlib或Seaborn):

    1. 数据准备

      • 确保日期列转换为datetime格式,并按时间排序。

      • 若数据为长格式(每行包含日期、公司名称、成交额),使用pivotgroupby整理为宽格式(公司为列,日期为索引)。

    2. 可视化技巧

      • 流线图绘制:使用plt.plot()seaborn.lineplot(),设置不同颜色和线型区分公司。

      • 标签优化:旋转横轴日期标签(plt.xticks(rotation=45)),避免重叠。

      • 辅助元素:添加标题、轴标签、图例和网格线,提升可读性。

    3. 交互性扩展(可选):

      • 使用plotly库生成动态图表,支持悬停查看具体数值。
  • 地平线图

    3.3.3 图形观察

    1. 直观理解:图形提供了一种直观的方式来理解数据。通过观察图表,我们可以快速把握数据的分布、趋势和异常。

    2. 模式识别:图形可以帮助我们识别数据中的模式,比如周期性波动、季节性变化等。

    3. 比较分析:通过并排或叠加不同的图形,我们可以比较不同数据集或不同时间段的数据变化。

    4. 异常检测:图形可以揭示数据中的异常点,这些异常可能是由于错误、特殊情况或重要事件引起的。

    5. 故事讲述:好的图形可以像故事一样,引导观众理解数据背后的含义。

    3.3.4 代码编写

    1. 精确控制:通过代码,我们可以精确控制图形的每一个细节,包括颜色、标签、图例等,以确保图形准确传达我们的分析结果。

    2. 自动化:代码可以自动化重复性的任务,比如数据清洗、图形生成等,这大大提高了工作效率。

    3. 可重复性:代码的可重复性确保了分析过程的一致性,这对于科学验证和结果的可靠性至关重要。

    4. 灵活性:代码允许我们灵活地调整分析方法,尝试不同的图形类型和参数,以找到最佳的可视化方式。

    5. 学习曲线:虽然编写代码可能需要一定的学习曲线,但掌握后可以极大地扩展我们的分析能力。

4 不规则时间序列图

4.1 数据准备

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

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

4.2 平滑曲线图

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

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

4.3 K线图

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

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

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

  • 平滑曲线图

    4.4.1 图形观察

    1. 趋势识别:图形可以直观地展示数据随时间的变化趋势,帮助我们快速识别上升、下降或波动的趋势。

    2. 模式识别:通过图形,我们可以识别数据中的模式,如周期性波动、季节性变化等,这对于理解数据的内在规律非常有帮助。

    3. 异常检测:图形可以帮助我们快速识别数据中的异常点或异常波动,这对于发现潜在的问题或机会至关重要。

    4. 比较分析:通过将多个图形并排放置,可以直观地比较不同数据集之间的差异和相似性,这有助于我们理解不同变量之间的关系。

    5. 数据分布:图形可以展示数据的分布情况,如集中趋势、离散程度等,这对于理解数据的整体特征非常有帮助。

    4.4.2 代码编写

    1. 精确控制:通过编写代码,可以精确控制图形的各个方面,包括颜色、标签、图例等,从而制作出符合特定需求的图形。

    2. 自动化处理:代码可以自动化处理大量数据,生成图形,这对于处理大数据集尤其有用。

    3. 可重复性:代码的可重复性意味着你可以轻松地重新生成图形,这对于验证结果和分享分析过程非常重要。

    4. 灵活性:代码允许你灵活地调整分析方法和图形类型,以适应不同的数据和分析需求。

    5. 学习曲线:编写代码可能需要一定的学习曲线,但一旦掌握,它将极大地提高你的数据分析能力。

  • k线图

    4.4.3 图形观察

    1. 直观性:图形提供了数据的直观表示,使得非专业人士也能快速理解数据的基本趋势和模式。

    2. 模式识别:通过图形可以更容易地识别数据中的模式,如趋势、周期性、季节性变化等。

    3. 异常检测:图形可以帮助快速发现数据中的异常值或异常波动,这对于识别错误或重要事件至关重要。

    4. 决策支持:图形可以作为决策支持工具,帮助分析人员和决策者理解数据背后的故事。

    5. 沟通工具:图形是向他人传达分析结果的有效方式,尤其是在需要快速传达信息的场合。

    4.4.4 代码编写

    1. 精确控制:通过代码,可以精确控制图形的生成过程,包括数据筛选、处理和可视化的每一个细节。

    2. 自动化:代码可以自动化重复性任务,如数据清洗、分析和图形生成,提高工作效率。

    3. 可重复性:代码的可重复性确保了分析过程的一致性,这对于科学验证和结果的可靠性至关重要。

    4. 灵活性:代码允许灵活地调整分析方法和图形类型,以适应不同的数据和分析需求。

    5. 学习曲线:虽然编写代码可能需要一定的学习曲线,但掌握后可以极大地扩展分析能力,处理更复杂的数据分析任务。