如何在終端介面藉助圖形化工具進行資料分析
如何在終端介面藉助圖形化工具進行資料分析
一、概述
本文主要介紹,在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:10
Time
二、背景
介紹前因
在日常的linux開發與測試過程中,有時會面臨資料分析與採集的工作。以六軸的資料採集為例:為保證視訊防抖的精確性,要求六軸資料的採集,必須達到一定的頻率。為確保採集頻率與預設值一致,除了在程式碼中進行統計外,一種常用的方式是通過讀取/proc/interrupts
節點,以獲取相應的中斷數:
[root@Ambarella /home/bin]#cat /proc/interrupts | grep -r 'gyro' -B 3
49: 0 0 0 0 GIC-0 148 Edge vin2_idsp_last_pixel
50: 0 0 0 0 GIC-0 121 Edge vout_lcd
51: 0 0 0 0 GIC-0 120 Edge vout_tv
52: 88418 0 0 0 GPIO 30 Edge gyro
如上所示,通過該節點,我們能夠獲取中斷號號,中斷總個數,中斷名稱等資訊。藉此方式,我們可以對採集頻率進行粗略的分析,但若想通過其獲得準確的頻率,則還是要經過一番運算。
正是考慮到以上以上的應用場景,就思考是否有方式能夠將以上資料以圖表的方式進行展現?具體的要求如下:
- 開放原始碼,支援跨平臺
- 能夠在終端介面,以圖表的方式展現資料,具有較強的可讀性
- 週期性的更新資料
- 具有一定的通用性,經過簡單修改可以適用於其它的應用場景
在明晰了具體的需求後,接下來需要確定具體的實現方案,具體的工作流如下:
- 網上搜尋是否有現成的開源庫,支援在終端繪圖?初步檢索,發現當前的開源庫都需要圖形介面支援?
- 轉換思路。當前看到一些介面,如升級進度條,linux的系統資源監視工具htop的介面是如何實現(如下圖)?
圖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:50
Time(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 ];then
last_cnts=$cur_cnts;
continue;
fi
#獲取差值,並按照"時間\t差值"的各執寫入資料檔案 plot.dat
echo -e `date "+%H:%M:%S"`"\t"`expr ${cur_cnts} - ${last_cnts}` >> plot.dat;
last_cnts=$cur_cnts;
#清除整個串列埠,以保證圖表顯示在視窗前端
echo -e "\033c"
#執行gnuplot 具體的配置就在 liveplot.gnu
gnuplot 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
方式獲取外,以下的幾篇部落格,亦有助於理解使用方法:
通過以上兩步驟,就可以繪製出上文展示的影像。
四、文件資訊
作者: Litost_Cheng發表日期:2020年11月10日
更多內容:
五、參考與連結
- 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
相關文章
- 藉助 webpack 對專案進行分析優化Web優化
- 藉助代理IP進行網頁抓取的終極指南網頁
- 藉助Python 函式進行模組化程式碼Python函式
- esxi伺服器進圖形化介面配置伺服器
- Linux中終端介面與圖形介面之間的切換關係Linux
- Linux效能分析工具與圖形化方法Linux
- 利用Tushare資料介面+pandas進行股票資料分析
- 藉助ETLCloud工具,輕鬆同步Doris資料至Inceptor資料庫Cloud資料庫
- 如何在 Android 上藉助 Wine 來執行 Windows AppsAndroidWindowsAPP
- java中資料庫查詢,搭配簡單的圖形介面進行查詢Java資料庫
- 藉助友盟+U-APM實現終端卡頓優化的全記錄優化
- 麒麟linux +達夢資料庫遠端圖形介面如何呼叫Linux資料庫
- 藉助Radamsa變異資料(初探)
- 繪圖和視覺化知識圖譜-《利用Python進行資料分析》繪圖視覺化Python
- 【前端除錯】- 藉助Performance分析並最佳化效能前端除錯ORM
- Ubuntu無法進入圖形介面Ubuntu
- 如何在終端中顯示圖片
- 容器化 RDS:藉助火焰圖定位Kubernetes效能問題
- win10遠端登入Ubuntu14.04圖形化介面Win10Ubuntu
- 07圖形化介面和命令列介面操作命令列
- 藉助AI助手分析LlamaIndex的工作流視覺化AIIndex視覺化
- 如何在移動端資料視覺化大屏實現分析?視覺化
- XManager:xshell顯示圖形化介面
- 科學計算:Python 分析資料找問題,並圖形化Python
- 藉助 zope.interface 深入瞭解 Python 介面Python
- prometheus指標終端繪圖工具Prometheus指標繪圖
- Linux磁碟爆滿無法進入圖形化介面解決方法Linux
- 3 個 Linux 上的 SSH 圖形介面工具Linux
- Centos7 使用ssh進行x11圖形介面轉發CentOS
- 使用Xmanager軟體遠端呼叫圖形化安裝Oracle資料庫Oracle資料庫
- 資料分析 | 資料視覺化圖表,BI工具構建邏輯視覺化
- oracle資料庫的ACFS圖形介面不可選擇Oracle資料庫
- 阿里雲centos安裝圖形化介面阿里CentOS
- oracle linux 7 安裝圖形化介面OracleLinux
- 藉助 DSL 來簡化 Loadgen 配置
- 如何在CentOS/RHEL 7上藉助ssm管理LVM卷?CentOSSSMLVM
- 藉助Windows自帶的ODBC工具驗證資料庫連線是否通暢Windows資料庫
- 怎麼進行資料分析