1 引言
??前段時間,花了很多精力在了解、學習和思考有關——大數據/數據挖掘/知識發(fā)現/人工智能等等的知識/概念。思維上很受啟發(fā),對一些曾經很模糊的概念,也有了較為清晰的認識。
??另一方面,作為一個程序員,我開始認真思考一些比較深層次的問題,比如,“信息的本質”,“軟件的本質”,“數據的本質”,“語言的本質”,“系統(tǒng)的本質與系統(tǒng)論”,“編程語言原理”,信息在傳輸過程中的損耗,“對象與關系”,“如何評估智能化的程度”,“神經網絡”,“計算機與大腦”等等等等。很有趣,也很有意義,而且讓我對現實生活和現實世界有了新的認知。
??另外,對“馮.諾依曼”體系結構,也有了進一步的認知,它與現代計算機結構的關系,以及對編程語言的影響。
本文主要是把自己學習中遇到的工具、概念、過程,做一些整理和記錄。
2 統(tǒng)計工具的學習
??首先,以運維監(jiān)控信息為原數據,以關聯(lián)性分析為切入點,展開分析,希望在大量、靜態(tài)的數據中獲取有價值的信息。在這一需求背景下,學習了 R 語言,并通過 R 語言完成了一些簡單的分析工作。
圖1 R語言編程環(huán)境

??R 語言更專注和適應于統(tǒng)計學領域,是做學術和實驗的絕佳選擇,在產品化和集成方面稍顯不足。于是,將關注點轉向 Python 的數據分析模塊,Numpy&Pandas,Scipy,Matplotlib等。Python 由于其自身的開放、簡潔、和靈活性,使其在數據分析領域擁有著得天獨厚的優(yōu)勢,相對于 R 在統(tǒng)計方面的專業(yè)性,Python 更均衡,更全面。
??此外,數據分析畢竟是一門專業(yè)性很強的工作,需要掌握很多統(tǒng)計學、數學相關的領域知識。比如,如何建立相關模型,如何進行回歸,如何理解檢驗參數,一般線性模型與廣義線性模型,非參數校驗與參數校驗,ROC曲線等等。Python 和 R 只不過是個工具,它們提供了所有可用的方法和函數,但如何使用它們,如何有效的建立模型,得出結論,則需要大量的時間、精力,以及統(tǒng)計分析經驗。作為一名程序員,這些才是真正的挑戰(zhàn)。
圖2 Python大數據學習路線

??除了 Python 和 R,還花了不少時間學習和使用SPSS。
??SPSS 是一個可視化的統(tǒng)計分析平臺,其分析結果清晰、直觀、易學易用,可對一些簡單的數據進行快速建模分析,對于掌握和理解一些專業(yè)術語有極大的幫助。它整合集成了統(tǒng)計分析中最常用、最主流的算法、過程、和工具,特別適合對分析、建模的方案進行快速驗證。
圖3 SPSS軟件視圖

??SPSS更適合那些傳統(tǒng)統(tǒng)計領域的從業(yè)人員,重心放在對工具的使用上,點一點,選一選,無需編程。但是 SPSS 缺少靈活性,尤其是在大數據分析時,SPSS所能完成的功能,也都可以通過python來編程實現。
??除了以上三種在數據分析領域普遍使用的工具,還花時間學習了杭州奇越數據科技有限公司的SPM軟件??傮w來說,SPM與SPSS有很多相似之處,但它比SPSS更專注于算法和大數據分析,能更靈活的應對數據的不同規(guī)模、復雜度和結構,對數據進行描述性分析,構建分析模型,或者預測。
??SPM內含了多種先進的數據挖掘、機器學習算法模塊,如CART、TreeNet、MARS、Random Forests等,學習起來明顯比SPSS更難,非統(tǒng)計學專業(yè)人員,一般只能使用經典模型進行分析,很難根據數據特征進行調參、優(yōu)化,或者創(chuàng)建新的分析模型。
圖3 SPM軟件視圖

??統(tǒng)計分析相關的工具主要了解了以上四種,數據分析是一個極其廣泛的領域,社會、金融、互聯(lián)網、娛樂、氣象等等,不同領域都有各式各樣定制化的分析工具或系統(tǒng)方案,另外還有很多開源工具,各具特色,但萬變不離其宗,數據分析的基本規(guī)律、結構和算法原理都一樣。
??研究了這些統(tǒng)計工具之后,我的感觸是,我們畢竟是程序員,很難做好統(tǒng)計專業(yè)的事情,一句話隔行如隔山,我花了挺多時間去看高等數學、概率論與數理統(tǒng)計,也看了不少的技術文檔,可以理解一些術語,一些算法,但是很難去使用它們、去建模、去做其他有創(chuàng)造性的事情,尤其是涉及到大數據和復雜結構時。
??而且,數據的統(tǒng)計分析是指導我們如何去分析、處理和理解數據,是一個技術概念、一個方法論。那么如何跳出晦澀的、統(tǒng)計相關的技術范疇?有沒有系統(tǒng)化的解決方案?
??于是,開始進入了第二階段的探索——知識發(fā)現。知識發(fā)現是數據分析的目的。
3 知識發(fā)現
??知識發(fā)現就是在數據中發(fā)掘知識,將低層次的原始數據轉換為高層次的信息。
??比如運維系統(tǒng)中,常常幾百G的歷史記錄躺在數據庫中,死氣沉沉,毫無價值,因為客戶根本不關心半年前的主機或者網絡設備到底是什么狀態(tài),有沒有告警,cpu高了還是低了,因為那都是陳年往事了。
??那么這些數據中,有沒有蘊藏著某些天機呢?可能有,也可能沒有,這就需要進行知識發(fā)現。沃爾瑪尿不濕與啤酒的經典案例,就是知識發(fā)現的最佳實踐。
圖4 知識發(fā)現過程圖

??知識發(fā)現過程可以概括為三個部分:數據準備、數據挖掘、結果的表達和解釋(數據展示)。
3.1 數據準備與數據倉庫
??數據準備其實就是把原始數據提取并轉換為可分析數據!當數據量小,數據結構簡單的時候,我們甚至可以通過excel來完成數據準備,無非就是進行數據規(guī)整、合并、填充、轉換等等操作唄;但是隨著數據量的增大,比如幾百M甚至幾G,或者多種不同結構的信息,excel就無能為力了,不過,還可以通過數據庫的sql語句來完成。
??當數據量進一步增大,數據結構進一步復雜,甚至數據來源于不同結構的存儲體系,有些在分布式數據庫中,有些在關系型數據庫中,有些可能在mysql里,有些可能在oracle里,要對這些不同來源,不同形式的數據進行綜合分析,很顯然,傳統(tǒng)的sql查詢也無能為力了。
??以淘寶網站的架構變遷為例,在最開始的時候,由于業(yè)務規(guī)模很小,電商系統(tǒng)的技術門檻是非常低的,簡單的前端設計+Apache+幾臺應用服務器+mysql,網站就可以運營了。這個時候業(yè)務量不大,每天的訂單數,訂單金額,訪問量,暢銷商品排行,客戶消費能力排行等等信息,幾張excel表就可以做了,一目了然。
??然后,客戶和訂單越來越多,查詢開始變慢,系統(tǒng)開始卡頓,這個時候就需要對網站架構進行升級,增加服務器,增加數據庫(分庫分表)。業(yè)務數據和指標依然可以從數據庫中查詢,基于數據表信息進行數據的查詢處理。
??接下來,隨著網購時代的真正來臨,業(yè)務規(guī)模指數級增長,數據量陡增,管理團隊的規(guī)模也越來越大,高層管理人員關心的問題,已經不再是流量,收入,PV,UV這些細枝末節(jié)的技術指標了,逐漸演變?yōu)橼厔菪缘摹⒓盒?、?zhàn)略性的分析。而這樣的需求,再也無法通過傳統(tǒng)的數據查詢來實現了,因為數據量太大了,原始數據必須抽象轉換為更高級的知識才能發(fā)揮價值。
??此時,數據倉庫技術應運而生!
??數據倉庫,簡單的說就是為了知識發(fā)現與輔助決策而構建的數據加工系統(tǒng),支持復雜的分析操作,并且提供直觀易懂的查詢結果。數據倉庫的建立標識著一家公司真正進入信息化階段!
圖5 數據倉庫結構視圖

??IBM、Oracle、Sybase、Microsoft、和SAS等IT巨頭都曾先后通過收購或研發(fā)推出了自己的數據倉庫解決方案,可見IT公司對數據倉庫的重視。
??Hive 是一個基于Hadoop的數據倉庫基礎架構,它提供了一系列的工具,可以用來進行數據ETL(Extract-Transform-Load),是一種可以存儲、查詢和分析 Hadoop中數據的技術方案。
??在了解和學習Hive時,專門使用了4臺服務器搭建了一個Hadoop集群,并安裝了Hive工具,進行了簡單功能的使用。
圖6 Hive體系結構

??當然,建立數據倉庫最重要的工作并非工具使用,而是對業(yè)務系統(tǒng)和決策需求的分析,確定數據倉庫所要解決的真正問題,不同主題下的查詢需求等等。
3.2 數據挖掘
??當數據準備結束,就開始進行數據挖掘了。數據挖掘是知識發(fā)現中的核心工作,它利用一系列的方法或算法從數據中獲取知識。
??數據挖掘的概念來源于機器學習。學習是人類才具有的智能行為,目的在于獲取知識。機器學習是研究如何使用計算機來模擬或實現人類的學習行為的技術,是人工智能領域中的重要研究方向。
圖7 機器學習的方向

??數據挖掘根據任務目的的不同,可以分為聚類、分類、關聯(lián)規(guī)則發(fā)現等。
??聚類算法是將沒有類別的數據按照距離的遠近親疏聚集成若干類別,典型的方法有K-means。分類方法是對有類別的數據,找出各類別的描述知識,典型的算法有ID3,C4.5,IBLE等。關聯(lián)規(guī)則是對多個數據項重復出現的概率進行評測,超過指定的閾值時,建立這些數據項之間的關聯(lián),典型的算法是Apriori。此外,人工神經網絡的相關算法也被應用于數據挖掘中。
??在學習過程中,深入的了解和學習了決策樹與人工神經網絡這兩類算法。
??決策樹是用樣本的屬性作為結點,用屬性的取值作為分支的樹結構,利用信息論原理對大量樣本的屬性進行分析和歸納而產生的。決策樹的根結點是所有樣本中信息量最大的屬性。ID3,C4.5都屬于決策樹算法。
??人工神經網絡算法,由大量處理單元互聯(lián)組成的非線性、自適應信息處理系統(tǒng)。它是在現代神經科學研究成果的基礎上提出的,試圖通過模擬大腦神經網絡處理、記憶信息的方式進行信息處理。目前廣泛應用于模式識別、智能機器人、預測估計、自動控制等領域,并成功解決了許多現代計算機難以解決的實際問題。
??Keras是目前比較流行、易學易用的python 深度學習框架,可以通過Keras對數據進行網絡建模和訓練。我在公司環(huán)境里搭建了Keras環(huán)境,并構建了簡單的網絡模型,實現圖片分類功能。對理解人工神經網絡的原理與應用有極大的幫助。
3.3 智能決策系統(tǒng)
??知識發(fā)現的最后一步是結果的表達和解釋,其實就是數據展示。
??對于小公司或者創(chuàng)業(yè)公司的初期,業(yè)務數據非常簡單,可以通過excel進行圖表展示,比如直方圖,餅圖等就能滿足需求了。對于中型公司,它們的數據量已經大到了一定程度,就需要報表系統(tǒng)來進行數據的展示。那么對于阿里、騰訊這樣的互聯(lián)網巨頭呢?馬云思考的一定是那些戰(zhàn)略性的、趨勢性的問題,他所想要看的數據已經不再是存儲在數據庫中的定量的、技術性的數據了,他需要一個智能決策系統(tǒng)。
??部署并實際操作體驗了以下兩個智能決策系統(tǒng):FineBI和Pentaho。
- FineBI
圖8 FineBI主界面

??FineBI是帆軟公司的產品,是一個初級的、易學易用的決策系統(tǒng),更準確的應該說是加強版的智能報表系統(tǒng),更適合中小規(guī)模企業(yè)使用。
??總的來說,FineBI是個入門級的決策系統(tǒng),基本做到了數據的展現與存儲的隔離,能支持多種數據源與數據格式。
2. Pentaho
??Pentaho是世界上最流行的開源商務智能軟件,以工作流為核心的,強調面向解決方案而非工具組件的,它包括一個web server平臺和幾個工具軟件:報表,分析,圖表,數據集成,數據挖掘等,可以說包括了商務智能的方方面面。它偏向于與業(yè)務流程相結合的BI解決方案,側重于大 中型企業(yè)應用。它允許商業(yè)分析人員或開發(fā)人員創(chuàng)建報表,儀表盤,分析模型,商業(yè)規(guī)則和 BI 流程。
圖9 Pentaho BI組成

??開源BI或者說決策系統(tǒng)是越來越多IT公司的選擇,因為其不遜于商業(yè)BI的功能,以及天生的開放性和靈活性,當然Pentaho的部署和使用需要投入非常多的技術成本。
4 業(yè)務拓撲
??業(yè)務拓撲是一個實踐任務,簡單的說就是主動探索環(huán)境中對象間的拓撲關系??梢允蔷W絡環(huán)境中的不同網絡節(jié)點間的關系,也可以是服務器中不同進程間的關系。建立業(yè)務拓撲,本質上是要依靠“關系”去剖析“系統(tǒng)”,是個逆向分析與解構的過程。
??關系具有這些特征:方向性、強度、頻度、成本、周期。
??可以根據采集的關系數據,對網絡節(jié)點進行數據分析,如聚類、分類,或者關聯(lián)分析等。能夠建立一個初始的關系網,然后再結合節(jié)點本身的信息,進一步的檢索、匹配業(yè)務信息,豐富關系網的屬性。
??第一階段,是發(fā)現服務器內部進程間的關系。
??使用tcpdump,scapy,netstat,ps等系統(tǒng)工具采集所需的業(yè)務信息,以數據流信息為關系,通過graphviz工具對BTSO系統(tǒng)中進程進行拓撲。
圖10 進程間的業(yè)務關系圖

??業(yè)務拓撲的后續(xù)工作還沒有展開,如果是預研性質的去探索可行性、做技術儲備和選型,可以繼續(xù)深入研究。但如果想結合業(yè)務場景進行開發(fā)、集成,可能還需要花更多的時間在業(yè)務需求的分析上。
5 總結
??智能化是件復雜的事兒,有些事情要想明白,說清楚,這樣討論和交流業(yè)務問題時才會有思想基礎和共鳴。
圖11 馮.諾伊曼結構

??上圖是馮.諾依曼結構,該結構指明了人工智能探索的方向。我們要進行運維智能化,我們的方向在哪里?我結合自己這半年的體會,開個腦洞,胡亂說說。
??1. 智能輸入系統(tǒng):我們要開發(fā)智能探針,snmp,wmi這些都太落伍了,智能指針能語音識別,能文字解析,能圖像識別,要能聯(lián)網,能爬各種互聯(lián)網信息,要能監(jiān)控移動終端,比如智能手機、手環(huán)、手表等等。
??2. 智能存儲系統(tǒng):想要單純的基于pgsql/cassandra去做大數據分析,去做業(yè)務智能化,確實是有點浪漫,巧婦難為無米之炊啊!要智能化,怎么說也得分布式、集群之類的吧!首先把規(guī)模搞上去,橫向擴展起來,然后再縱向分層,讀寫分離,搞個智能化的數據倉庫之類的,這樣就比較有感覺了。
??3. 智能運算系統(tǒng):運算這一塊是技術活,搞個算法團隊,專門琢磨怎么去優(yōu)化決策樹,如何重構卷積網絡模型。開源的、經典的算法,組件,統(tǒng)統(tǒng)想辦法集成進來,就兩個字,準!快!
??4. 智能控制系統(tǒng):除了智能探針,再開發(fā)個智能幫手,專門負責實施。運算系統(tǒng)中出來的指令直接分發(fā)到智能幫手那里,有令必行,令行禁止。什么升級啊,更新啊,遠程配置,控制,全部能干,包省心!
??5. 智能展示:既然都智能了,語音識別是必須的吧,領導站在大屏幕前,說到哪里就展示到哪里。畫面就更不用說了,必須炫酷,有視覺沖擊力。等等等等吧。
??腦洞就開到這兒,書歸正傳,智能這件事兒,大了可以很大,小了也可以很小??照{連上網就變成智能家具了,電視連上網就變成智能電視了,本質上他們只是增加了一種輸入方式而已。
|