时间数据可视化基础实验(南丁格尔玫瑰图)——Python热狗大胃王比赛数据集

news2025/1/4 16:03:54

【实验名称】

实验一:时间数据的可视化

【实验目的】

1.掌握时间数据在大数据中的应用

2.掌握时间数据可视化图表表示

3. 利用python程序实现堆叠柱形图的可视化

【实验原理】

       时间是一个非常重要的维度与属性。时间序列数据存在于社会的各个领域,如:天文观测数据、气象图像、临床诊断记录等。诊断记录包括病人的每次看病的病情记录以及心电图等扫描仪器的数据记录等。金融和商业交易记录如股市每天的交易价格及交易量、超市中每种商品的销售情况等。不管是延续性还是暂时性的时间数据,可视化的最终的目的就是从中发现趋势。时间型数据包含时间属性,不仅要表达数据随时间变化的规律,还需表达数据分布的时间规律。它可以分为连续性和离散型时间数据。

       这里就讲述下离散型数据的堆叠柱形图,堆叠柱形图的几何形状和常规柱形图很相似,在柱形图中,数据值为并行排列,而在堆叠柱图则是一个个叠加起来的。它的特点就是如果数据存在子分类,并且这些子分类相加有意义的话,此时就可以使用堆叠柱形图来表示。本次实验结合本章讲述的堆叠柱形图的列子,这里我们要画的是极坐标系-堆叠柱状图,也是南丁格尔玫瑰图。由于半径和面积的关系是平方的关系,南丁格尔玫瑰图会将数据的比例大小夸大,尤其适合对比大小相近的数值;由于圆形有周期的特性,所以玫瑰图也适用于表示一个周期内的时间概念,比如星期、月份。下面就用python程序来实现。

【实验环境】

Windows 11,python3.11.1,pycharm professional 2024.2.1,jupyter notebook

【实验步骤】

题目一:下载数据源(hot-dog-places)历年热狗大胃王比赛的前三名的成绩。

下载完成打开文件,里面的数据格式如下:

37dd7224341547ac83c1cd1b6912e1ba.png

把hot-dog-places.csv文件保存在python的运行目录里面。

56ad16ef601a47499b4927bf60d69b20.png

题目二:打开cmd ,安装python所需要的第三方的包

pip install pyecharts

 b2f3a9181e7b4ec9b6931989552d80af.png

cb9425c1f55c4916864d13955651333a.png

题目三:打开pycharm新建python Jupyter notebook文件(conda环境)

f0ee88b3252f42d191e9c818a0ef7119.png

选择conda环境: 

492909bf8f604096b82c27eb13f85049.png

新建jupyter notebook文件

1542c06322fe453f9463d99436231a9d.png

82400667b1a840eeb30325a21768298a.png

下面开始在代码块中编写代码:

50b0877157054fd2bc497df56077f8eb.png

 题目四:Python实现极坐标的堆叠柱形图

python代码如下:

其中:is_clockwise=True#顺时针坐标轴显示

.add_schema(
    radiusaxis_opts=opts.RadiusAxisOpts(data=randius, type_="category"),
    #调整角度轴顺时针显示is_clockwise=True
    angleaxis_opts=opts.AngleAxisOpts(is_clockwise=True)
)

1、读取数据

#pyecharts实现极坐标堆叠柱形图
from pyecharts import options as opts
from pyecharts.charts import Polar
from pyecharts.charts import Page
import csv
filename = 'hot-dog-places.csv'
datax = []
datay = []
with open(filename) as f:
    reader = csv.reader(f)
    for datarow in reader:
        datax.append(datarow)
randius = datax[0]
y1 = datax[1]
y2 = datax[2]
y3 = datax[3]
print('randius:',randius)
print('y1:',y1)
print('y2:',y2)
print('y3:',y3)

输出1:

af9bb5fde5de4e42b8f7852b0cb1b3d8.png

2、标签表示年份,圆边表示时间的极坐标的堆叠柱形图

#polar堆叠环状柱形图type_="barRadius",  柱状图的标签为年份,圆边表示时间
c = (
    Polar()
    .add_schema(
        radiusaxis_opts=opts.RadiusAxisOpts(data=randius, type_="category"),
        #调整角度轴顺时针显示
        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="Polar-堆叠柱状图Radius")
    )
    #调整柱状图的标签不显示
    .set_series_opts(label_opts=opts.LabelOpts(is_show=False))

)


c.render('polar_bar.html')

输出2:

fc1b390a35f041e7ab687fa8acde67ec.png

3、标签表示时间,圆边表示年份的极坐标的堆叠柱形图

#polar堆叠环状柱形图type_="barAngle",  柱状图的标签为时间,圆边表示年份
d = (
    Polar()
    .add_schema(
        angleaxis_opts=opts.AngleAxisOpts(data=datax[0], type_="category",is_clockwise=True)
        #调整角度轴顺时针显示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="Polar-堆叠柱状图Angle"))
    #调整柱状图的标签
    .set_series_opts(label_opts=opts.LabelOpts(is_show=False))
    
)
d.render('polar_bar2.html')

输出3:

1001b16c6b1146c2830d374a67c08ad8.png

4、图像拼接: 

#横向拼接两个图
page = Page(layout=Page.SimplePageLayout, page_title='polar_bar')
page.add(c, d)
page.render('polar_bar_page.html')

 bf9af32cc2594ce6b63052d6c6a3b1e4.png

总代码: 

#pyecharts实现极坐标堆叠柱形图
from pyecharts import options as opts
from pyecharts.charts import Polar
from pyecharts.charts import Page
import csv
filename = 'hot-dog-places.csv'
datax = []
datay = []
with open(filename) as f:
    reader = csv.reader(f)
    for datarow in reader:
        datax.append(datarow)
randius = datax[0]
y1 = datax[1]
y2 = datax[2]
y3 = datax[3]
print('randius:',randius)
print('y1:',y1)
print('y2:',y2)
print('y3:',y3)

#polar堆叠环状柱形图type_="barRadius",  柱状图的标签为年份,圆边表示时间
c = (
    Polar()
    .add_schema(
        radiusaxis_opts=opts.RadiusAxisOpts(data=randius, type_="category",is_inverse = False),
        #调整角度轴顺时针显示
        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="Polar-堆叠柱状图Radius")
    )
)

c.render('polar_bar.html')
#polar堆叠环状柱形图type_="barAngle",  柱状图的标签为时间,圆边表示年份
d = (
    Polar()
    .add_schema(
        angleaxis_opts=opts.AngleAxisOpts(data=datax[0], type_="category",is_clockwise=True),
        radiusaxis_opts=opts.RadiusAxisOpts(is_inverse = False),
        #调整角度轴顺时针显示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="Polar-堆叠柱状图Angle"))
    #调整柱状图的标签
    .set_series_opts(label_opts=opts.LabelOpts(is_show=False))
    
)
d.render('polar_bar2.html')

#横向拼接两个图
page = Page(layout=Page.SimplePageLayout, page_title='polar_bar')
page.add(c, d)
page.render('polar_bar_page.html')

最后呈现的图形如下:bf9af32cc2594ce6b63052d6c6a3b1e4.png

(这里我们画了2种极坐标的堆叠柱形图,一个是圆边表示时间,一个是半径表示时间。并把两张图显示在一个polar_bar_page.html里面。)

附录:全局配置项设置

# -*- coding: utf-8 -*-
"""
Created on Sun Apr 19 10:26:23 2020

@author: Administrator
"""


from pyecharts import options as opts
from pyecharts.charts import Bar
from pyecharts.faker import Faker
from pyecharts.commons.utils import JsCode
from pyecharts.globals import ThemeType

c = (
    Bar({"theme": ThemeType.MACARONS})
    .add_xaxis(["衬衫", "羊毛衫", "雪纺衫", "裤子", "高跟鞋", "袜子"])
    .add_yaxis("商家A", [5, 20, 36, 10, 75, 90])
    .add_yaxis("商家B", [15, 6, 45, 20, 35, 66])
    .set_global_opts(
        #分别设置X轴和Y轴
        yaxis_opts=opts.AxisOpts(name = '我是Y轴'),
        xaxis_opts=opts.AxisOpts(
            # 坐标轴类型。可选:
            # 'value': 数值轴,适用于连续数据。
            # 'category': 类目轴,适用于离散的类目数据,为该类型时必须通过 data 设置类目数据。
            # 'time': 时间轴,适用于连续的时序数据,与数值轴相比时间轴带有时间的格式化,在刻度计算上也有所不同,
            # 例如会根据跨度的范围来决定使用月,星期,日还是小时范围的刻度。
            # 'log' 对数轴。适用于对数数据。
            type_ = 'category',
    
            # 坐标轴名称。
            name = '我是X轴',
        
            # 是否显示 x 轴。
            is_show = True,
        
            # 只在数值轴中(type: 'value')有效。
            # 是否是脱离 0 值比例。设置成 true 后坐标刻度不会强制包含零刻度。在双数值轴的散点图中比较有用。
            # 在设置 min 和 max 之后该配置项无效。
            is_scale = False,
        
            # 是否反向坐标轴。
            is_inverse = False,
        
            # 坐标轴名称显示位置。可选:默认end
            # 'start', 'middle' 或者 'center','end'
            name_location = 'center',
        
            # 坐标轴名称与轴线之间的距离。
            name_gap = 35,
        
            # 坐标轴名字旋转,角度值。
            name_rotate = 30,  #旋转30度
        
            # 强制设置坐标轴分割间隔: Optional[Numeric]
            # 因为 splitNumber 是预估的值,实际根据策略计算出来的刻度可能无法达到想要的效果,
            # 这时候可以使用 interval 配合 min、max 强制设定刻度划分,一般不建议使用。
            # 无法在类目轴中使用。在时间轴(type: 'time')中需要传时间戳,在对数轴(type: 'log')中需要传指数值。
            interval= None,
        
            # x 轴所在的 grid 的索引,默认位于第一个 grid。
            grid_index = 0,
        
            # x 轴的位置。可选:
            # 'top', 'bottom'
            # 默认 grid 中的第一个 x 轴在 grid 的下方('bottom'),第二个 x 轴视第一个 x 轴的位置放在另一侧。
            position = 'bottom',
        
            # Y 轴相对于默认位置的偏移,在相同的 position 上有多个 Y 轴的时候有用。
            offset = 0,
        
            # 坐标轴的分割段数,需要注意的是这个分割段数只是个预估值,最后实际显示的段数会在这个基础上根据分割后坐标轴刻度显示的易读程度作调整。 
            # 默认值是 5
            split_number = 5,
        
            # 坐标轴两边留白策略,类目轴和非类目轴的设置和表现不一样。Union[str, bool, None]
            # 类目轴中 boundaryGap 可以配置为 true 和 false。默认为 true,这时候刻度只是作为分隔线,
            # 标签和数据点都会在两个刻度之间的带(band)中间。
            # 非类目轴,包括时间,数值,对数轴,boundaryGap是一个两个值的数组,分别表示数据最小值和最大值的延伸范围
            # 可以直接设置数值或者相对的百分比,在设置 min 和 max 后无效。 示例:boundaryGap: ['20%', '20%']
            boundary_gap = None,
        
        
            # 坐标轴刻度最小值。Union[Numeric, str, None]
            # 可以设置成特殊值 'dataMin',此时取数据在该轴上的最小值作为最小刻度。
            # 不设置时会自动计算最小值保证坐标轴刻度的均匀分布。
            # 在类目轴中,也可以设置为类目的序数(如类目轴 data: ['类A', '类B', '类C'] 中,序数 2 表示 '类C'。
            # 也可以设置为负数,如 -3)。
            min_  = None,
        
        
            # 坐标轴刻度最大值。Union[Numeric, str, None]
            # 可以设置成特殊值 'dataMax',此时取数据在该轴上的最大值作为最大刻度。
            # 不设置时会自动计算最大值保证坐标轴刻度的均匀分布。
            # 在类目轴中,也可以设置为类目的序数(如类目轴 data: ['类A', '类B', '类C'] 中,序数 2 表示 '类C'。
            # 也可以设置为负数,如 -3)。
            max_ = None,
        
        
            # 自动计算的坐标轴最小间隔大小。
            # 例如可以设置成1保证坐标轴分割刻度显示成整数。
            # 默认值是 0
            min_interval = 0,
        
        
            # 自动计算的坐标轴最大间隔大小。
            # 例如,在时间轴((type: 'time'))可以设置成 3600 * 24 * 1000 保证坐标轴分割刻度最大为一天。
            max_interval = None,   
               
        	# 坐标轴刻度线配置项,参考 `global_options.AxisLineOpts`
		    axisline_opts: Union[AxisLineOpts, dict, None] = None,
		
		    # 坐标轴刻度配置项,参考 `global_options.AxisTickOpts`
		    axistick_opts=opts.AxisTickOpts(is_show=True),
		
		    # 坐标轴标签配置项,参考 `series_options.LabelOpts`
		    axislabel_opts: Union[LabelOpts, dict, None] = None,
		
		    # 坐标轴指示器配置项,参考 `global_options.AxisPointerOpts`
		    axispointer_opts: Union[AxisPointerOpts, dict, None] = None,
		
		    # 坐标轴名称的文字样式,参考 `series_options.TextStyleOpts`
		    name_textstyle_opts: Union[TextStyleOpts, dict, None] = None,
		
		    # 分割区域配置项,参考 `series_options.SplitAreaOpts`
		    splitarea_opts: Union[SplitAreaOpts, dict, None] = None,
		
		    # 分割线配置项,参考 `series_options.SplitLineOpts`
		    splitline_opts: Union[SplitLineOpts, dict] = SplitLineOpts(),
        ))
    .render("C:/bar_base_.html")
)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2223739.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

金融工程--pine-script 入门

背景 脚本基本组成 策略实现 实现马丁格尔策略 初始化变量:定义初始资本、初始头寸大小、止损百分比、止盈百分比以及当前资本和当前头寸大小等变量。 更新头寸:创建一个函数来更新头寸大小、止损价格和止盈价格。在马丁格尔策略中,每次亏…

若依框架篇-若依集成 X-File-Storage 框架(实现图片上传阿里云 OSS 服务器)、EasyExcel 框架(实现 Excel 数据批量导入功能)

🔥博客主页: 【小扳_-CSDN博客】 ❤感谢大家点赞👍收藏⭐评论✍ 文章目录 1.0 实现使用 Excel 文件批量导入 1.1 导入功能的前端具体实现 1.2 导入功能的后端具体实现 1.3 使用 EasyExcel 框架实现 Excel 读、写功能 1.4 将 Easy Excel 集成到…

npm、yarn、pnpm的workspaces使用

示例项目中总会遇到npm的packages中出现的workspaces键值对,自己的项目中没接触过这个东西,到底是什么?怎么用的?简单研究记录一下: abbrev是一个npm包,提供缩写展开功能。‌ 当你定义一个缩写后&#xff0…

mac电脑设置chrome浏览器语言切换为日语英语等不生效问题

在chrome中设置了语言,并且已经置顶了,但是不生效,在windows上直接有设置当前语言为chrome显示语言,但是mac上没有。 解决办法 在系统里面有一个单独给chrome设置语言的: 单独给它设定成指定的语言,然后重…

CTFHUB技能树之文件上传——双写后缀

开启靶场,打开链接: 直接指明是双写绕过方法 上传06shaungxie.php,内容如下: 这一步其实最好换成.png或者.jpg或者.gif这三个符合文件格式的要求后缀 用burp抓包改包: 将php改成pphphp后再“Forward”: 上传…

机房巡检机器人有哪些功能和作用

随着数据量的爆炸式增长和业务的不断拓展,数据中心面临诸多挑战。一方面,设备数量庞大且复杂,数据中心内服务器、存储设备、网络设备等遍布,这些设备需时刻保持良好运行状态,因为任何一个环节出现问题都可能带来严重后…

高边坡稳定安全监测预警系统解决方案

一、项目背景 高边坡的滑坡和崩塌是一种常见的自然地质灾害,一但发生而没有提前预告将给人民的生命财产和社会危害产生严重影响。对高边坡可能产生的灾害提前预警、必将有利于决策者采取应对措施、减少和降低灾害造成的损失。现有的高边坡监测技术有人工巡查和利用测…

设计一个html+css+js的注册页,对于注册信息进行合法性检测

综合使用HTML、JavaScript和CSS进行注册页面设计,实现以下若干功能: 注意整个页面的色调和美观使用FramesetTable布局(div也可)对用户ID和用户名、口令不符合条件及时判断对口令不一致进行及时判断(34的及时判断&#…

【AI学习】Mamba学习(十三):简单了解S5模型,S5论文速读

学习了S4模型后,简单看一下S5模型。 来自两篇文章的摘要 苏神在文章《重温状态空间模型SSM:HiPPO的高效计算(S4)》中简单提到了S5模型: 由于 HiPPO 的推导是基于u(t)是一维函数进行的,所以到目前为止&am…

博弈论 C++

前置知识 若一个游戏满足: 由两名玩家交替行动在游戏进行的任意时刻,可以执行的合法行动与轮到哪位玩家无关不能行动的玩家判负 则称该游戏为一个公平组合游戏。 尼姆游戏(NIM)属于公平组合游戏,但常见的棋类游戏&…

揭开C++ STL的神秘面纱之string:提升编程效率的秘密武器

目录 🚀0.前言 🚈1.string 构造函数 🚝1.1string构造函数 🚝1.2string拷贝构造函数 🚈2.string类的使用 🚝2.1.查询元素个数或空间 返回字符串中有效字符的个数:size lenth 返回字符串目…

micro-app【微前端实战】主应用 vue3 + vite 子应用 vue3+vite

micro-app 官方文档为 https://micro-zoe.github.io/micro-app/docs.html#/zh-cn/framework/vite 子应用 无需任何修改,直接启动子应用即可。 主应用 1. 安装微前端框架 microApp npm i micro-zoe/micro-app --save2. 导入并启用微前端框架 microApp src/main.ts …

2024软考网络工程师笔记 - 第8章.网络安全

文章目录 网络安全基础1️⃣网络安全威胁类型2️⃣网络攻击类型3️⃣安全目标与技术 🕑现代加密技术1️⃣私钥密码/对称密码体制2️⃣对称加密算法总结3️⃣公钥密码/非对称密码4️⃣混合密码5️⃣国产加密算法 - SM 系列6️⃣认证7️⃣基于公钥的认证 &#x1f552…

为微信小程序换皮肤之配置vant

微信小程序自带的控件虽然具有很好的通用性和简洁性,但在面对一些复杂的交互场景和个性化的设计需求时,可能会显得力不从心。其功能的相对基础使得开发者在实现诸如多步骤复杂表单提交、实时数据交互与可视化展示、高度定制化的界面布局等方面&#xff0…

Navicat 安装

Navicat 安装步骤

qt 下载安装

1. 官网地址 https://www.qt.io/ 2. 下载 使用邮箱注册账号,登录,后边安装时也用的到 登录后: 这里需要电话号验证,电话号需要正确的,其他随便填,电话号中国区前需要86, 验证后自动下载 …

[CSP-J 2023] 一元二次方程(模拟)

变态的大模拟…… 洛谷题目传送门https://www.luogu.com.cn/problem/P9750 解题思路 主要还是模拟&#xff0c;题目让你求啥你就求啥&#xff0c;要注意细节。 然后化简根式的可以用质因数分解一下即可。 代码 #include<bits/stdc.h> using namespace std; #define …

opencv 图像翻转- python 实现

在做图像数据增强时会经常用到图像翻转操作 flip。 具体代码实现如下&#xff1a; #-*-coding:utf-8-*- # date:2021-03 # Author: DataBall - XIAN # Function: 图像翻转import cv2 # 导入OpenCV库path test.jpgimg cv2.imread(path)# 读取图片 cv2.namedWindow(image,1) …

C++基础与实用技巧第三节:内存管理与性能优化

第二章&#xff1a;C基础与实用技巧 第三节&#xff1a;内存管理与性能优化 1. 动态内存的管理策略与技巧 动态内存管理是C编程的核心部分之一&#xff0c;合理管理内存可以极大提高程序的性能和稳定性。在C中&#xff0c;动态内存的分配和释放通常使用new和delete运算符&am…

LeetCode_2427. 公因子的数目_java

1、题目 2427. 公因子的数目https://leetcode.cn/problems/number-of-common-factors/ 给你两个正整数 a 和 b &#xff0c;返回 a 和 b 的 公 因子的数目。 如果 x 可以同时整除 a 和 b &#xff0c;则认为 x 是 a 和 b 的一个 公因子 。 示例 1&#xff1a; 输入&#x…