2022-12-1 17:14:45 [显示全部楼层]
11759浏览
查看: 11759|回复: 0

[教程] 【行空板图形化Python入门教程】第12课:肺活量数据可视化...

[复制链接]
第12课 肺活量数据可视化报告



经过上节课的学习,我们已经可以把测量好的肺活量数据通过SIoT存储下来了,今天我们就来对这些数据进行进一步的分析。本项目在DF球星寻找了10个小伙伴使用我们的肺活量检测仪并从SIoT服务器下载并处理好所有数据,10个小伙伴测出的肺活量数据如下表:

qw1.jpg


通过观察上面的数据表,你能获取哪些信息呢?你能看出谁的肺活量最高吗?想一想,性别与肺活量有关系吗?让我们带着这些问题,一起来探索一下吧!

任务目标

在行空板上以折线统计图的形式,显示肺活量数据,并且使用柱状统计图统计男女生肺活量的平均值。



知识点


1. 了解函数概念

2. 了解Python中的循环语句

3. 了解程序中的映射语句

4. 学习利用线和形状绘制统计图表实现数据可视化

材料清单


1. 硬件清单

qw2.jpg


行空板x1


qw3.jpg


Type-C&Micro二合一USB线x1


2. 软件使用

Mind+编程软件x1

下载地址:https://www.mindplus.cc

qw4.jpg


动手实践

这课主要学习如何使用折线统计图与柱状统计图实现肺活量数据可视化,接下来就从下面两个任务来学习如何实现数据可视化。

任务一:绘制折线统计图

对肺活量数据进行处理后,在行空板上的坐标系图中描点并利用线段连接各个数据点,最后绘制成折线统计图。

任务二:绘制柱状统计图

在任务一的基础上,新增计算男女生肺活量平均数的功能,并且将肺活量平均数分别进行绘制,最后形成柱状统计图。


任务一:绘制折线统计图

1. 硬件搭建

使用USB连接线将行空板连接到计算机。

qw5.jpg


2. 软件准备

打开Mind+,按照下面图示完成软件准备过程。

qw6.jpg


3. 编写程序

开始编写程序之前,我们先来分析一下,要将肺活量数据绘制成折线图,首先需要一个横坐标为编号,纵坐标为肺活量数据的直角坐标系。然后将肺活量数据进行处理后在坐标系上进行描点,最后将各个数据点进行连线

qw7.jpg


(1) 直角坐标系

直角坐标系是提前做的图,因此只需要将这个坐标图从文件种加载到行空板的文件系统中。

qw8.jpg


使用 显示图片 指令,设置坐标轴图片在行空板X0Y0处开始显示。

(2) 描点

首先,需要将检测到的肺活量数据表中的数据,放入肺活量列表中。新建一个名为 肺活量数据 的变量用来存放列表,并 初始化列表 ,初始化列表的数据为下面表格的肺活量数据。



qw10.jpg


数据被存入列表后,怎样才能将列表的数据一个一个取出来并在行空板的坐标系图上进行描点呢?使用 for循环 指令,取出列表中的肺活量数据,并新建一个 肺活量值 变量用来存放从列表中取出来的肺活量数据。

注意:关于“for 循环指令”的相关介绍见知识园地

qw11.jpg


肺活量数据被取出来之后,就要在行空板上的坐标图中进行描点。使用 填充圆形 指令,在行空板上进行描点。如何才能确定填充圆形的XY坐标呢?以第一个数据1375为例,结合下面坐标轴的图来分析一下。

qw12.jpg


首先来确定填充圆形指令的X坐标,获取的第一个肺活量数据,描点的X坐标在横坐标第一个刻度的位置,因为每个刻度之间的距离为20,所以描点的X坐标为19+20,新建一个 变量X ,并设置初始值为19。

对应的Y坐标表示肺活量数据,但我们可以直接使用肺活量数据作为Y坐标吗?显然不可以,因为肺活量数值远超过屏幕坐标范围,数值大小和Y坐标大小也呈相反的关系。为了解决这些问题,我们可以使用数字类型中的 映射 指令,将肺活量值直接映射到行空板的Y坐标轴上。现在你可以新建一个 变量Y ,用来存放映射后的肺活量数据,填充圆形指令的Y坐标,就是映射后的变量Y。

注意:关于“映射”的相关介绍见知识园地

qw13.jpg


(3) 连线

上面的程序完成了将肺活量数据进行描点,接下来,就是用 显示线段 指令,将这些数据点用线段连接起来。首先需要确认线段的起点XY坐标,以及终点的XY坐标。当行空板上显示第一个点时,不需要连线。

当行空板上显示第二点时,就需要将第一个点和第二点用线段连接起来。当变量X>39时,新建一个 变量Y1 ,用来获取第一个点的变量Y值。因此,起点的XY坐标为:(变量X-20,变量Y1);终点的XY坐标为:(变量X,变量Y)。

qw14.jpg


(4) 创建折线图函数

程序中,绘制折线图描点和连线的功能,都是在 Python主程序 开始下面实现的。现在Python主程序开始下程序太多了,看起来也很乱。如何才能做到让Python主程序开始下面只保留一些初始化的程序,还要让绘制折线图的功能不变呢?

点击模块中的“函数”,然后点击“自定义模块”,修改函数名为:绘制折线图。点击完成,完成 绘制折线图的函数 创建。

注意:关于“函数”的相关介绍见知识园地

qw15.jpg


函数创建完成后,脚本区会出现一个新的 定义绘制折线图函数 指令。

qw16.jpg


然后将 Python主程序 开始下实现描点、连线的程序,用 绘制折线图函数名 来代替,这样Python主程序开始下面的程序指令就很简洁了。描点和连线的程序都放到 绘制折线图函数名 下。但是,需要注意的是绘制折线图函数中使用到的变量,都需要在函数下定义为 全局变量 。完整程序如下:

qw17.jpg


4. 程序运行

点击运行,程序运行成功后,行空板界面上显示绘制的肺活量折线图。

qw18.jpg



任务二:绘制柱状统计图

1. 编写程序

大家知道为什么要使用柱状统计图,来统计男女生肺活量的平均数吗?因为柱状统计图可以一眼看出数据大小,还能对比各个数据之间的比例差异。接下来,使用柱状统计图来看看性别与肺活量数据之间是否有关系?

开始编写程序之前,还是来分析一下,要绘制一个男女生肺活量平均数的柱状图,需要实现哪些功能。首先,需要统计男女生肺活量的平均数,然后将平均数映射到坐标图上,最后在柱状图上标出对应的男女生平均数值。

qw19.jpg


(1) 新建绘制柱状图函数

新建 绘制柱状图函数,并在 Python主程序开始 下调用这个函数名,接下来所有绘制柱状图的程序都编写在 绘制柱状图函数 下。

qw20.jpg


(2)计算女生肺活量的平均数



从上面的数据表中,可以很容易看出,编号为2、4、6、8、10的为女生肺活量,剩下的为男生肺活量。当肺活量数据都存放在列表中后,如何才能将男生肺活量和女生肺活量数据分开呢?

新建一个 女孩肺活量列表 ,并在 Python主程序 开始下,初始化女生肺活量列表。

qw22.jpg


使用 for循环指令 ,从肺活量数据列表中按索引1、3、5、7、9取出数据存放在女生肺活量列表中。

qw23.jpg


女生的肺活量数据索引出来后,如何才能统计女生肺活量的平均数呢?使用数字类型中的 列表中的平均数指令 ,并将女生肺活量列表放入求列表平均数据的指令中,计算女生肺活量列表中的肺活量平均数。

qw24.jpg


(3) 绘制柱状图

在绘制柱状图时,使用 显示线段 指令,设置线段的宽为20。现在就要先确定线段起点的XY坐标以及终点的XY坐标。线段的X坐标使用来指定柱状图的显示位置,因此线段的起点和终点X坐标,可以直接设定为:110。

qw25.jpg


线段的终点Y坐标也可以确定,因为柱状图的横轴对应在行空板Y 的位置为300,所以线段的Y坐标也为300。使用 映射 指令,将女生平均数映射后的值赋值给 变量Y2,线段起点的Y坐标就为变量Y2。

qw26.jpg


男生肺活量平均值的柱状图绘制用同样的方法即可,需要注意的是,男生使用 for循环 取肺活量数值的范围为:0-9。

qw27.jpg


(4) 显示平均值

柱状图绘制成功后,使用 显示文字 指令,在柱状图的上方显示对应的男女生平均数值。

qw28.jpg


完整程序如下:

qw29.jpg


2. 程序运行

点击运行,程序运行成功后,行空板上先绘制肺活量数据的折线统计图,然后再绘制男女生肺活量平均数的柱状统计图。显示效果如下图:

qw30.jpg


3. 试一试

接下来,大家试一下用任务二中的方法,将总的肺活量平均数也绘制在柱状图中吧!绘制好柱状图之后,再完善一下柱状统计图中的细节。参考图如下:

qw31.jpg


知识园地

1. 什么是数据可视化

数据可视化的意义是帮助人从大量数据中高效快速获取有效信息,信息的质量很大程度上依赖于其表达方式。数据可视化的意义,就是借助图形化的手段,让数据变得更加直观

qw32.jpg


图表是“数据可视化”的常用手段,其中折线统计图柱状统计图最为常用。折线统计图不仅能够看出数量多少,还能看出数量增减的变化趋势。柱状统计图可以一眼看出数据大小,还能对比各个数据之间的比例差异。当然还存在很多不同形式的图表用来展示数据的其它特性,有兴趣你可以自己查询研究一下。

qw33.jpg


2. 认识函数


什么是函数?函数,就是将一段经常使用的程序封装起来,在需要使用这个程序的位置调用这个函数即可,并且这个函数可以多次调用,这样做可以减少重复代码。在一个较大的程序中,一般会将程序分为多个程序块,每个程序块实现指定的功能,我们可以将这些实现指定功能的程序块定义为函数。

比如,在程序中写好了一段程序,这段程序用于实现一个特定的功能。问题来了,如果下次需要实现同样的功能,难道要把前面程序再重新编写一次?如果这样做效率实在太低了,这意味着每次当程序需要实现同样功能时,都要将前面的程序复制一次。正确的做法是,将实现特定功能的程序定义成一个函数,每次当程序需要实现该功能时,只要执行(调用)该函数即可。

qw34.jpg


其实,函数的本质就是一段有特定功能、可以重复使用的程序,这段程序已经被提前编写好了,并且为其起一个“好听”的名字。在后续编写程序过程中,如果需要同样的功能,直接通过名字就可以调用这段程序。

3. 认识for循环

在项目程序中,我们使用了for循环指令,如下图。为什么这条指令叫for循环呢?

qw35.jpg


因为该指令生成的Python代码中,有关键词for,因此称为for循环。

这条循环指令的实现原理是什么呢?该指令调用的是Python内置的range()函数创建一个整数序列。指令中,需要设置三个参数,开始值、停止值、步长。这个指令可以实现循环从开始值计数到达停止值,一旦到达停止值就立刻退出循环。也就是说,这个循环指令是按照变量my variable的变化控制循环次数。

qw36.jpg


什么是range()函数?我们将这条指令结合Python代码来分析,其中my variable是变量,range()是函数,range表示在指定范围内,等间隔排列的整数集合对象。

例如,现在设定指定开始值(1),停止值(9),以及步长(2),range()函数就是将1-9的数字进行等间隔排列{1、2、3、4、5、6、7、8、9},步长就是控制变量my variable从1开始每次递增2,从而实现将肺活量列表中编号为1、3、5、7、9这五个数据取出来放入女生肺活量列表中。

qw37.jpg


细心的同学肯定发现了,在指令中我们设置的范围是1-9,步长为2,但是生成的Python代码的是range(1,10,2),范围变为了1-10,这是生成的Python代码出错了吗?

qw38.jpg


注意:这是因为Python中range()函数实现的是从开始值计数到达停止值-1,就退出循环。我们循环指令要实现从开始值计数到达停止值,就退出循环,所以生成的Python代码是在指令停止值的基础上+1。

4. Python中的循环语句

Python中,除了for循环还有while循环。Mind+控制类型指令中,有以下五种不同的循环指令,接下来,将通过循环指令结合它们生成的Python代码来了解这几种循环指令的用法

qw39.jpg


通过循环指令生成的Python代码,发现前三条循环指令的Python代码中都有关键词for,最后两条循环指令的Python代码中都有while。也就是说,在Python代码中,循环结构可以分为for循环和while循环两大类。指令说明可以参考下列表格:

qw40.jpg


5. 认识映射

映射,是用来把一个范围的数据向另一个范围等比例转换的指令,你可以把它理解为一个比例尺转化工具。比如,下面映射指令的意思,就是将0-100之间的数字20变成0-2之间的数字2。

qw41.jpg


任务一中的映射程序,将具体的肺活量值映射为行空板的Y坐标值。这样,就可以根据映射后的值在行空板的Y坐标上进行描点。

qw42.jpg


5. 指令学习


qw43.jpg


该指令定义一个名为描点的函数。




qw44.jpg


该指令利用函数名调用函数。




qw45.jpg


该指令用要将集合A中的具体的元素,在集合B中找到唯一一个与之对应的元素。




qw46.jpg


该指令用于控制循环次数,通过变量my variable的变化来控制循环的次数。


控制变量my variable从开始值(1)每次递增步长(1),直到变量my variable到达结束值后,停止循环。




qw47.jpg


该指令用于计算列表中的平均数。



挑战自我

这课中,我们学习了如何使用线段和图形绘制肺活量数据的折线统计图与柱状统计图。接下来,大家试一下在上面程序的基础上增加两个按钮。例如:按下“折线图”按钮,行空板上开始绘制肺活量数据的折线图;按下“柱状图”按钮,行空板上绘制男女生肺活量平均数的柱状统计图。

qw48.jpg


附件下载
第十二课.zip (699.99 KB, 下载次数: 18)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2023 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail