李佳謙



摘 要:為了學習計算機數據處理方面的基礎知識和回歸分析方法,通過實踐,實現了對二進制數據文件中數據的解析,并利用回歸分析方法推導出數據轉換的算法模型。
關鍵詞:計算機 數據解析 回歸分析
中圖分類號:TP3文獻標識碼:A文章編號:1003-9082(2019)12-000-01
為了深入學習計算機數據處理方面的知識,我參與了一項計算機數據文件解析的任務,內容是:針對一個溫濕度監控系統,把系統的報警信息(即超標的溫度)通過短信發送出去,問題是,報警信息保存在一個二進制文件中,無法直接讀取。所以首先要從數據文件中找到這些數據是如何存儲的,并推導出這些數據與實際顯示的信息(即溫度)之間的關系。
首先用UltraEdit軟件以16進制打開數據文件,見圖 1:
可以看出其中加亮部分的ASCII碼就是監控點位的編號,并且在文件中每隔固定長度就出現另一個監控點位的名稱。因此可以推測每個點位的報警數據應該就在兩個編號之間。在這些信息中,除了報警數據,還有一些附加信息,例如報警的日期和時間,應先把這些數據找出來并排除掉,以免干擾對數據分析。所以先來查看系統顯示的報警日期和時間(模擬數據的時間是“2015-12-09 15:07:41”),這些數據的16進制為“07DF-0C-09 0F:07:29”。通過比較,可以在文件中找到對應“月”“日”“時”“分”“秒”的數據,而在對應“月”的數據的前面是16進制的“73”,轉換成十進制就是“115”,與模擬數據的年份“2015”相差1900。我們知道,在有些計算機系統中,經常以1900年為年份的0點,可以推測,文件中保存的是實際年份與1900的差值。
下一步檢查當報警數據發生變化時,除了“名稱”“時間”之外,發生變化的數據的便是報警數據。通過模擬一些不同的報警數據,可以發現,當模擬報警數據變化而其他信息不變時,有4個連續的數據(16進制)也在變化,如圖 2加亮部分:
數據占據4個字節,當模擬數據為整數時,第1、2位均是“00”,只有第3、4位有數據。而帶有小數時,則第1、2位會顯示非“00”數據。根據“高位在后,低位在前”,推斷第1、2位的是小數,而3、4位是整數。為了驗證推論,我們在系統中模擬了幾個只有整數的報警數據:10、11、12,然后打開文件,發現第3、4位分別是“20 41”、“30 41”、“40 41”,很明顯,第3位是變化的,是低位,第4位是高位,由此,我推測數據應該第4、3、2、1位這樣順序排列的,例如前面圖片中 “CD CC 8C 3F”,對應的16進制數據應該是“3F 8C CC CD”,即十進制的“1066192077”,很明顯這里不是直接存儲的“溫度”數據,很可能存儲的是傳感器的電信號,所以后續的關鍵任務是找到如何將這些“電信號”數據轉換為真正的報警數據,即“溫度”的方法。我們模擬了超過100組數據(即:<電信號數據:溫度數據>),用于回歸分析。在Excel中,把“溫度”作為x軸、“電信號”數據作為y軸錄入到表格中,生成曲線圖,見圖 3:
可以看出,所有的數據點分布在由直線段組成的折線上,可以發現線段的交點橫坐標分別是在2、4、8、16、32…,即2n的位置。由此推測,在數據文件中存儲的數據,即“電信號”與“溫度”之間的對應關系應該是用這個折線模型來匹配的。為了驗證,我們推導了2、4、8、32…這些區間內的線段對應的一系列的直線方程,即:y=ax+b,其中a為x的系數,b為常數。因為我們的目的是要根據“電信號”推導出“溫度”數據,因此將報警文件中的數值(電信號)作為自變量,“溫度”數據作為因變量,利用SPSS軟件進行線性回歸,例如,我們分別將對應4和8兩點的數據(分別是:1082130432、1090519040)錄入SPSS中,然后執行線性回歸,結果得到a=4.76837158203125E-7、b=-512.000。即:當報警文件中的數值介于“1082130432和1090519040”之間時,采用方程y=4.76837158203125E-7x-512.000來計算,將“電信號”轉換為“溫度”值。作為驗證,將對應溫度為“7”的電信號數值“1088421888”,代入到上述方程,可以得到正確的結果:y=7。按此方法,逐一計算出1-2、2-4、4-8、8-16、16-32等報警范圍的方程,見表 1:
利用這些方程,分段對其他模擬產生的數據文件中的數據進行驗證,結果完全一致,從而確認該算法是正確和有效的。
有了這個模型,后續便可實時分析和獲得各點位的溫度數據,實現后續發送報警短信的功能了。通過這次學習和研究,我了解了一些計算機數據相關的基礎知識和它們在實際中的應用,學會了用一些工具軟件來實現回歸分析的方法。同時也體會到了在解決實際問題中,要靈活思考,注意觀察,發現規律,從不同角度分析問題、解決問題的重要性。