时间数据的可视化

时间数据的可视化

实验目的

1.掌握时间数据在大数据中的应用
2.掌握时间数据可视化图表表示
3. 利用 Python 程序实现堆叠柱形图可视化

实验原理

时间是一个非常重要的维度与属性。时间序列数据存在于社会的各个领域,如:天文观测数据、气象图像、临床诊断记录等。诊断记录包括病人的每次看病的病情记录以及心电图等扫描仪器的数据记录等。金融和商业交易记录如股市每天的
交易价格及交易量、超市中每种商品的销售情况等。不管是延续性还是暂时性的时间数据,可视化的最终的目的就是从中发现趋势。时间型数据包含时间属性,不仅要表达数据随时间变化的规律,还需表达数据分布的时间规律。它可以分为连续性和离散型时间数据。
这里就讲述下离散型数据的堆叠柱形图,堆叠柱形图的几何形状和常规柱形图很相似,在柱形图中,数据值为并行排列,而在堆叠柱图则是一个个叠加起来的。它的特点就是如果数据存在子分类,并且这些子分类相加有意义的话,此时就可以使用堆叠柱形图来表示。本次实验结合本章讲述的堆叠柱形图的列子,这里我们要画的是极坐标系-堆叠柱状图,也是南丁格尔玫瑰图。由于半径和面积的关系是平方的关系,南丁格尔玫瑰图会将数据的比例大小夸大,尤其适合对比大小相近的数值;由于圆形有周期的特性,所以玫瑰图也适用于表示一个周期内的时间概念,比
如星期、月份。下面就用 Python 程序来实现。

实验环境

os:windows11
python:v3.11
pycharm:2024.1

实验步骤

(一)下载数据源

(http://datasets.flowingdata.com/hot-dog-places.csv)该实验所采用的数据集为轻量小样本数据集,里面包含了2000——2010年的历年热狗大胃王比赛的前三名的成绩。(csv文件)数据结构如下所示:
在这里插入图片描述
下载好保存到自己的目录。

(二)打开自己的本地编译器,我这里使用的是python的集成编译环境pycharm

在这里插入图片描述

(三)新建python文件

在这里插入图片描述
在这里插入图片描述

(四)安装第三方库,我这里选择在pycharm的终端安装

在这里插入图片描述
安装第三方库的源码如下:

pip install pyecharts
  1. 开始编写程序实现极坐标的堆叠柱形图
    实验结果如下:
    在这里插入图片描述
from pyecharts import options as opts
from pyecharts.charts import Polar, Page
import csv

# 1. 数据读取(处理浮点数值)
filename = "E:\\technology\\The_third_theaper\\hot-dog-places.csv"
datax = []
with open(filename) as f:
    reader = csv.reader(f)
    for row in reader:
        datax.append(row)

radius = datax[0]  # 半径轴标签(时间)
# 关键修改:使用 float() 转换后再转 int 避免 ValueError [1,3](@ref)
y1 = [int(float(i)) for i in datax[1]]  # 截断小数处理
y2 = [round(float(i)) for i in datax[2]]  # 四舍五入处理
y3 = [int(float(i)) for i in datax[3]]

# 2. 半径表示时间的堆叠图(保持原设计)
c = (
    Polar()
    .add_schema(
        radiusaxis_opts=opts.RadiusAxisOpts(data=radius, type_="category"),
        angleaxis_opts=opts.AngleAxisOpts(is_clockwise=True)
    )
    .add("A", y1, type_="bar", stack="stack0", itemstyle_opts=opts.ItemStyleOpts(color="blue", opacity=0.8))
    .add("B", y2, type_="bar", stack="stack0", itemstyle_opts=opts.ItemStyleOpts(color="green", opacity=0.8))
    .add("C", y3, type_="bar", stack="stack0", itemstyle_opts=opts.ItemStyleOpts(color="red", opacity=0.8))
    .set_global_opts(
        title_opts=opts.TitleOpts(title="半径表示时间"),
        # 添加数据标签显示[5](@ref)
        tooltip_opts=opts.TooltipOpts(trigger="axis")
    )
)

# 3. 圆边表示时间的堆叠图(优化样式)
d = (
    Polar()
    .add_schema(
        angleaxis_opts=opts.AngleAxisOpts(
            data=radius,
            type_="category",
            is_clockwise=True,
            # 优化标签显示[5](@ref)
            axislabel_opts=opts.LabelOpts(color="#333", font_size=12)
        ),
        radiusaxis_opts=opts.RadiusAxisOpts(
            type_="value",
            # 添加网格线[7](@ref)
            splitline_opts=opts.SplitLineOpts(is_show=True)
        )
    )
    .add("A", y1, type_="bar", stack="stack0",
         # 设置颜色透明度[2](@ref)
         itemstyle_opts=opts.ItemStyleOpts(color="blue", opacity=0.8))
    .add("B", y2, type_="bar", stack="stack0",
         itemstyle_opts=opts.ItemStyleOpts(color="green", opacity=0.8))
    .add("C", y3, type_="bar", stack="stack0",
         itemstyle_opts=opts.ItemStyleOpts(color="red", opacity=0.8))
    .set_global_opts(
        title_opts=opts.TitleOpts(title="圆边表示时间"),
        # 添加图例[7](@ref)
        legend_opts=opts.LegendOpts(pos_left="right")
    )
)

# 4. 合并图表(优化布局)
page = Page(layout=Page.SimplePageLayout)
page.add(c, d)
# 设置页面尺寸[3](@ref)
page.render_options = {"width": "1600px", "height": "800px"}
# 保存到桌面
desktop_path = "C:\\Users\\你的用户名\\Desktop\\render.html"
page.render(desktop_path)
    

最后呈现的图形如上:
(这里我们画了两种极坐标的堆叠柱形图,一个是半径表示时间,一个是圆边
表示时间。并把两张图显示在一个 render.html 里面)
5. 对于该数据集,请换一种合适的图表方式展示,并写出相关代码。(我这里使用的是雷达图)
实验代码如图所示:

from pyecharts import options as opts
from pyecharts.charts import Radar
import csv

# 1. 数据读取(处理浮点数值)
filename = "E:\\technology\\The_third_theaper\\hot-dog-places.csv"
datax = []
with open(filename) as f:
    reader = csv.reader(f)
    for row in reader:
        datax.append(row)

radius = datax[0]  # 半径轴标签(时间)
# 关键修改:使用 float() 转换后再转 int 避免 ValueError [1,3](@ref)
y1 = [int(float(i)) for i in datax[1]]  # 截断小数处理
y2 = [round(float(i)) for i in datax[2]]  # 四舍五入处理
y3 = [int(float(i)) for i in datax[3]]

# 2. 配置雷达图的指示器
indicators = [{"name": item, "max": max(y1 + y2 + y3) * 1.2} for item in radius]

# 3. 创建雷达图
(
    Radar()
    .add_schema(
        schema=indicators,
        shape="circle",
        center=["50%", "50%"],
        radius="80%",
        angleaxis_opts=opts.AngleAxisOpts(
            type_="value",
            boundary_gap=False,
            start_angle=90,
            is_clockwise=True,
            axistick_opts=opts.AxisTickOpts(is_show=False),
            splitline_opts=opts.SplitLineOpts(is_show=True),
            axislabel_opts=opts.LabelOpts(is_show=False),
            axisline_opts=opts.AxisLineOpts(is_show=False),
        ),
        radiusaxis_opts=opts.RadiusAxisOpts(
            type_="value",
            splitarea_opts=opts.SplitAreaOpts(
                is_show=True, areastyle_opts=opts.AreaStyleOpts(opacity=1)
            ),
        ),
        polar_opts=opts.PolarOpts(),
    )
    .add("A", [y1], color="blue", areastyle_opts=opts.AreaStyleOpts(opacity=0.2))
    .add("B", [y2], color="green", areastyle_opts=opts.AreaStyleOpts(opacity=0.2))
    .add("C", [y3], color="red", areastyle_opts=opts.AreaStyleOpts(opacity=0.2))
    .set_global_opts(
        title_opts=opts.TitleOpts(title="不同类别在各时间点的雷达图展示"),
        legend_opts=opts.LegendOpts(pos_top="5%", pos_right="5%"),
        toolbox_opts=opts.ToolboxOpts(is_show=True),
        tooltip_opts=opts.TooltipOpts(is_show=True)  # 移动到这里
    )
    .render("E:\\technology\\The_third_theaper\\radar_chart.html")
)

实验结果
在这里插入图片描述

实验总结

本次实验聚焦于时间数据的可视化,通过使用 pyecharts 库,旨在实现极坐标堆叠柱形图以及雷达图对给定时间序列数据的可视化展示。
在实验准备阶段,我将 hot - dog - places.csv 文件保存到指定目录,并在 cmd 中安装 pyecharts 第三方包。随后打开 Python 3.6 IDLE,在新建文件中编写程序。利用 csv 库读取数据文件,将数据按行读取并存入列表。之后,借助 pyecharts 库中的 Polar 类,尝试创建以半径表示时间和以圆边表示时间的极坐标堆叠柱形图。
然而,在运行代码时,遇到了版本不兼容的问题。起初,代码无法正常运行,经过仔细排查发现,pyecharts 库的版本与 Python 3.6 的环境存在一定冲突。由于 pyecharts 库不断更新迭代,某些新的函数和特性在较新的版本中才支持,但这些特性可能与 Python 3.6 的语法规则或标准库不兼容。同时,pyecharts 库在更新过程中,部分函数的参数和调用方式也发生了变化,这也导致了原有代码在运行时出错。
针对这个问题,我采取了一系列解决措施。首先,查阅了 pyecharts 官方文档,了解不同版本之间的差异以及与 Python 3.6 的兼容性情况。然后,尝试降低 pyecharts 库的版本,通过在 cmd 中使用特定命令安装了一个与 Python 3.6 兼容的稳定版本。经过多次尝试和调试,最终成功解决了版本不兼容问题,实现了极坐标堆叠柱形图的绘制,直观呈现出不同年份下多组数据的变化趋势及堆叠情况。
完成极坐标堆叠柱形图绘制后,为了更全面展示数据特征,我决定使用雷达图对数据集进行二次可视化。在绘制雷达图时,同样借助 pyecharts 库,合理设置雷达图的各项参数,如维度名称、数据系列等,确保雷达图能准确传达数据信息。
通过本次实验,我不仅熟练掌握了 pyecharts 库在绘制不同图表类型时的用法,还深入理解了不同图表对数据可视化的优势。极坐标堆叠柱形图能清晰展示时间序列下各数据系列的变化趋势与堆叠关系,雷达图则在多维度数据对比方面表现出色。同时,这次版本不兼容问题的解决也让我积累了宝贵的经验,在今后的编程实践中,会更加关注库的版本兼容性问题,提前做好规划和测试,以避免类似问题的再次出现。这为今后处理类似时间数据可视化问题奠定了坚实基础,在未来的数据分析工作中,可根据数据特点和分析需求,灵活选择合适的图表类型,更高效地呈现数据价值。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值