一、实验目的
-
理解时间数据在大数据分析中的应用
-
掌握时间数据的可视化展示方法
-
使用Python编程实现堆叠柱形图的可视化展示
二、实验原理
时间是重要的维度和属性,时间序列数据广泛存在于各个领域,如天文观测、气象数据、临床诊断记录等。诊断记录包括病人的就诊记录及心电图等扫描数据。金融和商业交易数据如股市的日交易价格和交易量、超市中商品的销售情况等。不论是持续性还是暂时性的时间数据,数据可视化的核心目的是揭示其中的趋势。时间数据不仅包含时间属性,还需要展示数据随时间变化的规律,并揭示数据的时间分布特征。时间数据可分为连续型和离散型。
本实验聚焦于离散型时间数据的堆叠柱形图。堆叠柱形图与常规柱形图形状相似,不同之处在于数据值不是并行排列,而是一个个叠加在一起。当数据存在子分类且这些子分类相加具有意义时,堆叠柱形图就特别适用。实验将结合本章讲解的堆叠柱形图实例,绘制极坐标系下的堆叠柱状图,也称为南丁格尔玫瑰图。由于南丁格尔玫瑰图的半径与面积呈平方关系,它会放大数据的比例差异,尤其适用于对比大小相近的数值。同时,由于圆形具有周期性特征,玫瑰图也特别适用于表示周期性时间数据,如星期和月份等。我们将使用Python编程来实现该图表的可视化。
三、实验环境
OS:Windows
Python:v3.11
PyCharm 2024.1.1
四、实验步骤
1.下载数据源 http://datasets.flowingdata.com/hot-dog-places.csv历年热狗大胃王比赛的前三名的成绩。
2. 打开PyCharm 中的终端,安装Python所需要的第三方的包,输入pip install pyecharts
打开PyCharm 2024.1.1
在上面的界面开始编写程序。
import pyecharts.options as opts
from pyecharts.charts import Polar,Page
import csv
filename = "F:\ksh\hot-dog-places.csv"
data_x = []
data_y = []
with open(filename) as f:
reader = csv.reader(f)
for data_row in reader:
data_x.append(data_row)
x = data_x[0]
print(x)
y1 = data_x[1]
y1 = [float(i) for i in y1]
y2 = [float(i) for i in data_x[2]]
y3 = [float(i) for i in data_x[3]]
def polar_datazoom_slider():
c = (
Polar(init_opts=opts.InitOpts(width="600px", height="500px"))
.add_schema(radiusaxis_opts=opts.RadiusAxisOpts(data=x),
angleaxis_opts=opts.AngleAxisOpts(is_clockwise=True))
.add("A", y1, type_="bar", stack="stack0")
.add("B", y2, type_="bar", stack="stack0")
.add("C", y3, type_="bar", stack="stack0")
.set_global_opts(title_opts=opts.TitleOpts(title="极坐标系-堆叠柱状图例1"))
)
return c
def polar_datazoom():
c2 = (
Polar(init_opts=opts.InitOpts(width="600px", height="500px"))
.add_schema(angleaxis_opts=opts.AngleAxisOpts(data=x, is_clockwise=True))
.add("A", y1, type_="bar", stack="stack0")
.add("B", y2, type_="bar", stack="stack0")
.add("C", y3, type_="bar", stack="stack0")
.set_global_opts(title_opts=opts.TitleOpts(title="极坐标系-堆叠柱状图例2"))
)
return c2
def page_draggable_layout():
page = Page()
page.add(
polar_datazoom_slider(),
polar_datazoom()
)
page.render("极坐标系-堆叠柱状图.html")
if __name__ == "__main__":
page_draggable_layout()
3.开始编写程序实现极坐标的堆叠柱形图
最后呈现的图形如下:
(这里我们画了两种极坐标的堆叠柱形图,一个是半径表示时间,一个是圆边 表示时间。并把两张图显示在一个 render.html 里面)
4. 对于该数据集,请换一种合适的图表方式展示,并写出相关代码。
绘制折线图,代码如下:
import numpy as np
import matplotlib.pyplot as plt
# 数据准备
years = [2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010]
hot_dog_places = [
[25, 50, 50.5, 44.5, 53.5, 49, 54, 66, 59, 68, 54],
[24, 31, 26, 30.5, 38, 37, 52, 63, 59, 64.5, 43],
[22, 23.5, 25.5, 29.5, 32, 32, 37, 49, 42, 55, 37]
]
# 创建画布
plt.figure(figsize=(10, 6))
# 绘制折线图
for i, data in enumerate(hot_dog_places):
plt.plot(years, data, marker='o', label=f'Place {i+1}')
# 添加标题和标签
plt.title("热狗店数量随年份变化", fontsize=14)
plt.xlabel("年份", fontsize=12)
plt.ylabel("热狗店数量", fontsize=12)
# 添加网格
plt.grid(True, linestyle='--', alpha=0.6)
# 添加图例
plt.legend()
# 显示图形
plt.tight_layout()
plt.show()
运行结果如图所示:
五、实验心得
-
时间数据可视化是一种高效的数据分析工具,它能够将复杂的时间序列数据转化为直观、易于理解的形式,帮助用户快速识别数据中的关键趋势和潜在模式。
-
选择合适的可视化图表和工具对于实验的成功至关重要。不同类型的图表适应不同的数据特征和分析目标,只有根据实际需求合理选择,才能充分发挥可视化的优势。
-
交互功能的引入显著提升了可视化的用户体验和分析效率。通过交互操作,用户可以灵活地查看数据细节并进行动态分析,从而更深入地挖掘数据中的价值。
本次时间数据可视化实验取得了积极成果,通过可视化技术直观地展示了时间数据的变化趋势、模式和异常情况,为数据分析和决策提供了有力支持。但在实验过程中也发现了一些不足,例如数据预处理的深度不足、可视化设计的优化空间较大以及分析的深度和广度有所欠缺。在未来的工作中,我们将着力改进这些方面,提升时间数据可视化的效果与质量。同时,探索将时间数据可视化与其他技术的结合,如大数据技术和人工智能,以应对日益复杂的数据分析需求,为各领域的数据驱动决策提供更强有力的工具和方法。