目录
【实验目的】
掌握时间数据在大数据中的应用
掌握时间数据可视化图表表示
利用Python程序实现堆叠柱形图可视化
【实验原理】
时间是一个非常重要的维度与属性。时间序列数据存在于社会的各个领域, 如:天文观测数据、气象图像、临床诊断记录等。诊断记录包括病人的每次看病的 病情记录以及心电图等扫描仪器的数据记录等。金融和商业交易记录如股市每天的 交易价格及交易量、超市中每种商品的销售情况等。不管是延续性还是暂时性的时 间数据,可视化的最终的目的就是从中发现趋势。时间型数据包含时间属性,不仅 要表达数据随时间变化的规律,还需表达数据分布的时间规律。它可以分为连续性 和离散型时间数据。
这里就讲述下离散型数据的堆叠柱形图,堆叠柱形图的几何形状和常规柱形图 很相似,在柱形图中,数据值为并行排列,而在堆叠柱图则是一个个叠加起来的。 它的特点就是如果数据存在子分类,并且这些子分类相加有意义的话,此时就可以 使用堆叠柱形图来表示。本次实验结合本章讲述的堆叠柱形图的列子,这里我们要 画的是极坐标系-堆叠柱状图,也是南丁格尔玫瑰图。由于半径和面积的关系是平方 的关系,南丁格尔玫瑰图会将数据的比例大小夸大,尤其适合对比大小相近的数 值;由于圆形有周期的特性,所以玫瑰图也适用于表示一个周期内的时间概念,比 如星期、月份。下面就用Python程序来实现。
【实验环境】
OS:Windows 12th Gen Intel(R) Core(TM) i7-12700H 2.30 GHz
Python:v3.8
【实验步骤】
1.下载数据源(http://datasets.flowingdata.com/hot-dog-places.csv )历年热狗大胃王比赛的前三名的成绩。
hot-dog-places.c sv 里面的数据格式如下:
把hot-dog-places.csv文件保存在自己的目录里面。比如(D:/test/)
2. 打开终端,安装Python所需要的第三方的包,输入
pip install pyecharts
3. 打开pycharm,新建文件,开始编写程序实现极坐标的堆叠柱形图。
from pyecharts import options as opts
from pyecharts.charts import Polar, Page
import csv
# 1. 数据读取(处理浮点数值)
filename = "D:\\数据可视化\\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="#FF6347")) # 设置颜色为番茄红
.add("B", y2, type_="bar", stack="stack0",
itemstyle_opts=opts.ItemStyleOpts(color="#4682B4")) # 设置颜色为钢青
.add("C", y3, type_="bar", stack="stack0",
itemstyle_opts=opts.ItemStyleOpts(color="#32CD32")) # 设置颜色为酸橙绿
.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(opacity=0.8, color="#FF6347")) # 设置颜色为番茄红
.add("B", y2, type_="bar", stack="stack0",
itemstyle_opts=opts.ItemStyleOpts(opacity=0.8, color="#4682B4")) # 设置颜色为钢青
.add("C", y3, type_="bar", stack="stack0",
itemstyle_opts=opts.ItemStyleOpts(opacity=0.8, color="#32CD32")) # 设置颜色为酸橙绿
.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"}
page.render("render.html")
最后呈现的图形如下: (这里我们画了两种极坐标的堆叠柱形图,一个是半径表示时间,一个是圆边 表示时间。并把两张图显示在一个render.html里面)
4.对于该数据集,换一种合适的图表方式展示(例如雷达图),并写出相关代码。
import pandas as pd
from pyecharts import options as opts
from pyecharts.charts import Radar
# 加载数据
data = pd.read_csv('hot-dog-places.csv')
# 提取年份和数据
years = data.columns.tolist()
values1 = data.iloc[0].tolist()
values2 = data.iloc[1].tolist()
values3 = data.iloc[2].tolist()
# 配置雷达图的指标
c_schema = [{"name": year, "max": max(values1[i], values2[i], values3[i]) + 10} for i, year in enumerate(years)]
# 创建雷达图
radar = (
Radar()
.add_schema(schema=c_schema)
.add("数据系列1", [values1], color="#f9713c")
.add("数据系列2", [values2], color="#b3e4a1")
.add("数据系列3", [values3], color="#d14a61")
.set_global_opts(
title_opts=opts.TitleOpts(title="历年热狗大胃王比赛的前三名的成绩的雷达图"),
legend_opts=opts.LegendOpts(is_show=True),
toolbox_opts=opts.ToolboxOpts(is_show=True)
)
)
# 渲染图表
radar.render("hot_dog_places.html")
运行结果如下所示:
【实验总结】
本次实验通过Python实现堆叠柱形图与雷达图的绘制,可以掌握时间数据处理与可视化方法。实验借助历年热狗大胃王比赛成绩数据集,将时间数据作为关键维度进行分析,通过绘制堆叠柱形图和雷达图,直观展示了比赛成绩随时间的变化趋势,并且成功运用Python的pyecharts库实现了极坐标系下的堆叠柱形图可视化,达成了实验目标。实验中使用Page类将两个堆叠柱形图整合到一个HTML文件中,方便对比和展示。
实验成功绘制出极坐标系下的堆叠柱形图,直观展示了历年热狗大胃王比赛前三名成绩的变化趋势。半径表示时间的图表突出了不同年份成绩的对比,圆边表示时间的图表则更清晰地展示了各名次成绩在时间周期内的分布。通过雷达图,清晰地呈现了历年热狗大胃王比赛前三名成绩的综合情况,方便对不同年份和名次的成绩进行多维度对比。 本次实验仅针对特定数据集进行了可视化分析。在未来的研究中,可以尝试将实验方法应用于其他类型的时间序列数据,拓展实验的应用范围。