如何在终端界面借助图形化工具进行数据分析
如何在终端界面借助图形化工具进行数据分析
一、概述
本文主要介绍,在Linux终端界面,如何借助交互式绘图工具gnuplot,对数据进行分析,并以图表的方式进行展示,具体效果如下图所示:
Interrupt Data 643500 +-------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | + + + + + + | | arch_timer . | | . | 643000 |-+ . +-| | . | | . . | | . | 642500 |-+ . +-| | . | | | 642000 |-+ . +-| | . | | . | | . | 641500 |-+ . . +-| | | | . | | . | 641000 |-+ . +-| | . | | | | + . + + + + + | 640500 +-------------------------------------------------------------------------------------------------------------------------------------------------------------------+ 02:18:35 02:18:40 02:18:45 02:18:50 02:18:55 02:19:00 02:19:05 02:19:10Time
二、背景
介绍前因
在日常的linux开发与测试过程中,有时会面临数据分析与采集的工作。以六轴的数据采集为例:为保证视频防抖的精确性,要求六轴数据的采集,必须达到一定的频率。为确保采集频率与预设值一致,除了在代码中进行统计外,一种常用的方式是通过读取/proc/interrupts
节点,以获取相应的中断数:
[root@Ambarella /home/bin]#cat /proc/interrupts | grep -r 'gyro' -B 349: 0 0 0 0 GIC-0 148 Edge vin2_idsp_last_pixel50: 0 0 0 0 GIC-0 121 Edge vout_lcd51: 0 0 0 0 GIC-0 120 Edge vout_tv52: 88418 0 0 0 GPIO 30 Edge gyro
如上所示,通过该节点,我们能够获取中断号号,中断总个数,中断名称等信息。借此方式,我们可以对采集频率进行粗略的分析,但若想通过其获得准确的频率,则还是要经过一番运算。
正是考虑到以上以上的应用场景,就思考是否有方式能够将以上数据以图表的方式进行展现?具体的要求如下:
- 开放源码,支持跨平台
- 能够在终端界面,以图表的方式展现数据,具有较强的可读性
- 周期性的更新数据
- 具有一定的通用性,经过简单修改可以适用于其它的应用场景
在明晰了具体的需求后,接下来需要确定具体的实现方案,具体的工作流如下:
- 网上搜索是否有现成的开源库,支持在终端绘图?初步检索,发现当前的开源库都需要图形界面支持?
- 转换思路。当前看到一些界面,如升级进度条,linux的系统资源监视工具htop的界面是如何实现(如下图)?
![](https://htop.dev/images/htop-2.0.png)
图1:htop展示界面
以上图示中,仅也只能够通过进度条,进行直观显示,可以满足部分需求,但仍不是最优解。
- 继续搜索相关资料,发现
gnuplot
可以在终端界面绘图。现行在虚拟机上验证可行性。 - 了解基本使用后,移植到设备上。
以上,为确定最终方案的大体的过程。
三、实现流程
经过前期的了解,确定了以下的技术方案: ``` shell script + gnuplot ``` 其中shell脚本负责数据的采集,gnuplot则负责最终的展示工作。最终的效果如下图所示:
gyro sample frequency 580 +----------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | + + + + + + + + + + | | A gyro ***A*** | 570 |-+ * +-| | * | | ** | | * * | 560 |-+ * * +-| | * * | | * * | 550 |-+ * * +-| | A * * | | * * * | 540 |-+ * * * * +-| | * * * * A A | | A * * A * * ** * | 530 |-+ * * * ** * * * * * * +-| | * * A * * * * * * A** A * * * * | | * * * * * * * * A*** * * A * * * * * * | | * * * * *A * * * * * * A**A** * * * * * * * * A | 520 |-+ * * * A* * * * * * *A** * A A * * A** *A***A**A * A** * * ** *-| | * * *A** * * * * *A A** ***A**A* A A *A* *** A**A**A A**A *| | A + A* A + A**A***A**A A* + A**A** + + + A* + + A + | 510 +----------------------------------------------------------------------------------------------------------------------------------------------------------------------+ 00:05:55 00:06:00 00:06:05 00:06:10 00:06:15 00:06:20 00:06:25 00:06:30 00:06:35 00:06:40 00:06:45 00:06:50Time(hh:mm:ss)
图中横轴标志时间(hh:mm:ss),纵轴标志频率(Hz),其中字符A标志着各个数据采集点。从中不难发现,采集频率基本稳定在510Hz左右。
注:这与配置的500Hz,存在一定误差,关于引起误差的原因,会在后边详述。
接下来,我们会详解具体的实现流程。
1. gnuplot介绍
gnuplot是一套跨平台的数学绘图自由软件。使用命令列界面,可以绘制数学函数图形,也可以从纯文字档读入简单格式的座标资料,绘制统计图表等等。它可以提供多种输出格式,例如PNG,SVG,PS,HPGL,供文书处理、简报、试算表使用。它并不是统计软件或数学软件。 –gnuplot维基简介
gnuplot作为跨平台软件,同时支持windows,以及linux。本文基于Linux平台,因此采用源码进行编译。源码获取地址:gnuplot源码;
由于其采用了Autoconf配置脚本。编译方式与其它使用GNU构建系统的开源软件并无二异,具体指南详见代码仓库根目录下的说明文档INSTALL
。
注:一个相对规范的开源项目,都会有相应的文档(README,或者INSTALL)用来介绍项目的基本内容以及安装方法。授人以鱼不如授人以渔。在面对其他开源库,或第三方工具时,也建议先阅读相关文档。由此及彼,个人在提供开源库,或发布公共API时,也应提供必要的文档,以方便后来人。
成功编译后,即可获得相应的可执行文件gbuplot
;
2. 通过一个简单的示例,介绍其使用流程
本节将通过一个简单的示例——采集并分析六轴的采样频率,来介绍该方案的使用流程。
该示例最终实现的效果是:
- 每秒获取最新的数据,计算差值,获得频率
- 设置横轴显示时间,纵轴显示频率
- 每秒获取数据文件中最新的50条数据,清空窗口后,刷新显示界面
1)获取有效数据
此一步,需要我们借助shell脚本获取中断数据,经过简单的处理后,保存至数据文件中。
#!/bin/bash
rm plot.dat
i=0;
last_cnts=0;
cur_cnts=0;
while [ 1 ]
do let i=i+1;
#获取当前中断数量cur_cnts=`cat /proc/interrupts | grep -rin 'gyro' | awk '{print $3}'`
#第一次执行时,last_cnts为0,无需统计差值if [ $last_cnts -eq 0 ];thenlast_cnts=$cur_cnts;continue;fi
#获取差值,并按照"时间\t差值"的各执写入数据文件 plot.datecho -e `date "+%H:%M:%S"`"\t"`expr ${cur_cnts} - ${last_cnts}` >> plot.dat;last_cnts=$cur_cnts;
#清除整个串口,以保证图表显示在窗口前端echo -e "\033c"
#执行gnuplot 具体的配置就在 liveplot.gnugnuplot liveplot.gnu
#由于绘图操作需要消耗时间,因此1秒的延时并不准确,这才造成了统计的频率比设置的频率要高sleep 1
done
该脚本的流程相对简单,流程如下:
2)gnuplot设置
gnuplot作为命令行工具,除了可以采用交互模式运行外,也可以通过读取文件的当时执行。在第一步gnuplot liveplot.gnu
,相关的配置就记录在liveplot.gnu
文件中,具体内容如下:
#设置终端样式
set terminal dumb size 180,30
#设置时间格式
set xdata time
set timefmt "%H:%M:%S"
set format x "%H:%M:%S"
set title "gyro sample frequency"
# x轴名称
set xlabel 'Time(hh:mm:ss)'
# y轴名称
set ylabel 'frequency(Hz)'
#设置自动缩放(x轴与y轴)
set autoscale
# 以 plot.dat 的最后50条数据作为数据源,进行绘制;using 1:2意为,采用第1列作为x轴数据来源,采用第2列作为y轴数据源;with linespoints表示采用点线的方式形式绘制数据
plot "<(tail -n 50 plot.dat)" using 1:2 with linespoints title 'gyro'
#设置刷新周期为1秒
#pause 1
#重新读取文件
#reread
关于gnuplot
的使用教程,出了可以借助内置的help
方式获取外,以下的几篇博客,亦有助于理解使用方法:
- gnuplot画图点线设置
- gnuplot 学习小计2-时间、文件、数据选择、平滑
- gnuplot 画文本特定行的数据
- gnuplot 入门教程 4
通过以上两步骤,就可以绘制出上文展示的图像。
四、文档信息
作者: Litost_Cheng
发表日期:2020年11月10日
更多内容:
- Litost_Cheng的个人博客
- Litost_Cheng的Github
- Litost_Cheng的博客
五、参考与链接
- gnuplot:http://www.gnuplot.info/
- htop:https://htop.dev/
- gnuplot维基简介:https://zh.wikipedia.org/wiki/Gnuplot
- gnuplot源码:https://sourceforge.net/p/gnuplot/gnuplot-main/ci/master/tree/
- Autoconf:https://zh.wikipedia.org/wiki/Autoconf
- gnuplot画图点线设置:https://blog.csdn.net/u012836354/article/details/78908436
- gnuplot 学习小计2-时间、文件、数据选择、平滑:https://blog.csdn.net/yanxiangtianji/article/details/8806802
- gnuplot 画文本特定行的数据:https://blog.csdn.net/qq_24484485/article/details/80967765
- gnuplot 入门教程 4:https://blog.csdn.net/liyuanbhu/article/details/8502461
如何在终端界面借助图形化工具进行数据分析相关推荐
- SQLyog —— 图形化工具使用
SQLyog下载链接: 点击跳转 提取码:520H 在这一篇内容MySQL数据库 -- 常用语句当中讲到关于MySQL数据库命令的基本使用,这一篇是关于SQLyog数据库图形化工具的内容,先进行安装 ...
- mysql mac 图形化界面_mac安装mysql图形化工具?
mac安装mysql图形化工具的方法:首先下载mysql图形化工具Navicat Premiun的安装文件:然后点击下载后的dmg文件,拖到application文件夹进行安装,根据安装指导界面的指示 ...
- 6.MySQL图形化工具的使用
6.图形化工具的使用 6.1 Mysql Workbench Mysql Workbench是Mysql官方推出的集成图形化工具,替代了之前的图形化管理工具Mysql Administrator和图形 ...
- mac 图形化安装mysql,mac安装mysql图形化工具?
Mac下载安装mysql及图形化工具Navicat Premium 一.下载安装mysql 1.1.下载mysql (1)软件下载地址:https://dev.mysql.com/downloads/ ...
- JVM监控之图形化工具
一.工具概述 使用命令行工具存在以下的局限性: 无法获取方法级别的分析数据,如方法之间的调用关系.各方法的调用次数和调用时间等 要去用户登陆到java应用所在的宿主机上 分析数据通过终端输出,结构不够 ...
- MacOS系统下的图形化工具
MacOS系统下的图形化工具 MacOS系统下安装了Git后,发现如果Git中有中文文档操作还是比较麻烦(需要输入中文的文件名).图形化对Git的操作还是相对于方便一些.所以准备找一个图形化的工具. ...
- portainer安装_Docker 图形化工具—Portainer
点击上方 Java旅途,选择 设为星标 优质文章,每日送达 一.Docker图形化工具 Docker图形页面管理工具常用的,DockerUI,Portainer,Shipyard.DockerUI是P ...
- 连接HiveServer2的图形化工具SQuirrel和Dbeaver
文章目录 SQuirrel SQL Client简介 视频演示 安装SQuirrel SQL Client 启动hdfs和hiveserver2 配置SQuirrel SQL Client 使用SQu ...
- Moviepy音视频开发:视频转gif动画或jpg图片exe图形化工具开发案例
☞ ░ 前往老猿Python博文目录 ░ 一.引言 老猿之所以学习和研究Moviepy的使用,是因为需要一个将视频转成动画的工具,当时在网上到处搜索查找免费使用工具,结果找了很多自称免费的工具,但转完 ...
最新文章
- 【jquery】jquery基础知识
- 隐马尔科夫模型(HMM)解释 和 前向与后向算法[转] 讲解通俗易懂 赞
- url 参数 后台 加密_一套拿来即用的后台管理系统,非常方便(附项目地址)
- centos打显卡驱动命令_CentOS7显卡驱动问题
- windows-oracle下载安装,简单的启动使用。
- CISCO网络故障排错命令总结分享
- 一维数组和指针的关系
- python timer 死掉_Python timer定时器两种常用方法解析 Python中如何在一段时间后停止程序...
- ERP商品管理业务逻辑封装(三十四)
- 网吧母盘的制作(2007详细)
- SPSS多元线性回归及逐步回归学习笔记
- R语言常见报错及解决方法
- linux 脚本 expected,使用expect实现shell中scp自动输入密码
- 露营不在朋友圈,快乐在诗和远方
- 5.mysql的数据结构
- redis:redis-cli使用
- 各种电平标准的讨论(TTL,ECL,PECL,LVDS、CMOS、CML.......)
- 利用Xutils框架进行断点续传下载
- 倍加福PVS58N-011AGR0BN-0013编码器
- 云原生时代崛起的编程语言Go常用标准库实战
热门文章
- Project build error: Non-resolvable parent POM for com.gzl.cn:springboot01:0.0.1-SNAPSHOT: Could not
- Redmi9A,联发科HelioG25处理器,救砖,刷ubuntutouch
- 语言的魅力 - JSON的发展史
- 开源项目之Splayer 射手影音播放器
- 如何批量将 gif 图片转换为 jpg 格式
- 关于densenet的改进:condensenet、VoVNet
- 达观数据携手CCF举办第五届“达观杯”自然语言处理文本分类竞赛 ,开赛报名中!
- R语言函数总结(转)
- 生活就是一对反义词,你的虚惊一场,在疼你的人那里就是力挽狂澜。
- GDB调试显示< optimized_out >