99999久久久久久亚洲,欧美人与禽猛交狂配,高清日韩av在线影院,一个人在线高清免费观看,啦啦啦在线视频免费观看www

熱線電話:13121318867

登錄
首頁精彩閱讀用于大數(shù)據(jù)的嵌入式分析和統(tǒng)計
用于大數(shù)據(jù)的嵌入式分析和統(tǒng)計
2015-06-13
收藏

用于大數(shù)據(jù)的嵌入式分析和統(tǒng)計


用于大數(shù)據(jù)[注]的嵌入式分析和統(tǒng)計已經(jīng)成為了業(yè)內(nèi)一個重要的主題。隨著數(shù)據(jù)量的不斷增長,我們需要軟件工程師對數(shù)據(jù)分析提供支持,并對數(shù)據(jù)進行一些統(tǒng)計計算。本文概要地介紹了嵌入式數(shù)據(jù)分析和統(tǒng)計的相關(guān)工具及類庫,其中包括獨立的軟件包和帶有統(tǒng)計能力的編程語言。我期待著收到本專欄讀者和潛在的專欄作者的反饋,告訴我你們對這個專欄的想法,以及你們想要了解哪些相關(guān)技術(shù)?!狢hristof Ebert

不管在信息技術(shù)界還是嵌入式技術(shù)界,大數(shù)據(jù)都已經(jīng)變成了非常關(guān)鍵的概念。1 這樣的軟件系統(tǒng)通常都有眾多的異構(gòu)連接,包括軟件應(yīng)用程序、中間件和傳感器之類的組件。隨著云設(shè)施的使用不斷增長,可用的數(shù)據(jù)資源變得更加豐富了;智能電網(wǎng)、智能車輛技術(shù)、醫(yī)藥最近都出現(xiàn)了這種相互連接的數(shù)據(jù)源。我們每年生產(chǎn)的數(shù)據(jù)將近1,200艾字節(jié),并且這一數(shù)字有增無減。2,3 這樣海量的非結(jié)構(gòu)化數(shù)據(jù)是業(yè)務(wù)和IT主管[注]無法回避的巨大挑戰(zhàn)。

大數(shù)據(jù)的定義由四個維度組成:數(shù)據(jù)量、數(shù)據(jù)源的復(fù)雜度、生產(chǎn)速度,以及潛在用戶數(shù)。這些數(shù)據(jù)需要被組織起來,將無數(shù)的位和字節(jié)轉(zhuǎn)換成可操作的信息—除非我們能提煉出其中的含義,否則數(shù)據(jù)再豐富都沒用。在以前,程序員是寫代碼的,而統(tǒng)計學(xué)家是做統(tǒng)計的。程序員一般用通用的編程語言,而統(tǒng)計學(xué)家一般用專門的程序完成自己的日常工作,比如IBM的SPSS (用于社會科學(xué)的統(tǒng)計軟件包)。統(tǒng)計學(xué)家擺弄的國家統(tǒng)計數(shù)據(jù)或市場調(diào)研通常只有選定人群能用,而程序員處理的大量數(shù)據(jù)都是放在數(shù)據(jù)庫或日志文件中的。從云到幾乎所有人都可用的大數(shù)據(jù)改變了這一切。


隨著數(shù)據(jù)量和數(shù)據(jù)類型的不斷增加,越來越需要軟件工程師參與進來對它們做不同的統(tǒng)計分析。軟件工程師積極地以前所未有的規(guī)模收集和分析數(shù)據(jù),讓它們變得有價值,拓展新的業(yè)務(wù)模型。1 比如說,考慮一下主動性維護。我們可以持續(xù)地對機器、網(wǎng)絡(luò)進行監(jiān)測,一旦發(fā)現(xiàn)違規(guī)和失效,則立即處理,從而讓我們可以在破壞發(fā)生或系統(tǒng)癱瘓之前糾正它們。這可以從材料成本以及人工介入兩方面降低維護成本。處理數(shù)據(jù)并找出其中的含義通常只是一個大項目中的一部分工作,或者只是嵌在某些軟件中,配置中,或硬件優(yōu)化問題中。幸運的是,大數(shù)據(jù)社區(qū)已經(jīng)對這種需求作出了響應(yīng),他們創(chuàng)建了一系列的工具,可以將統(tǒng)計學(xué)家的一些魔力交給程序員—實際上,這些工具通常要比傳統(tǒng)的統(tǒng)計工具更強大,因為它們能處理的數(shù)據(jù)量在規(guī)模上要比老的統(tǒng)計樣本幅度更大。

用于嵌入式分析和統(tǒng)計的技術(shù)

可以執(zhí)行統(tǒng)計分析的軟件有很多;表一給出了一些最流行的軟件。它們的區(qū)別在于用戶對它們統(tǒng)計復(fù)雜度的要求,易用性,以及它們是獨立的軟件包,還是帶有統(tǒng)計能力的編程語言。

表一中有三項很值得我們注意:R、Python、D3 (數(shù)據(jù)驅(qū)動文檔Data- Drives-Documents)。R是一門面向統(tǒng)計的語言。Python是一門通用的編程語言,并且已經(jīng)證實在科學(xué)家和研究人員中間很流行,他們會用它作科學(xué)及統(tǒng)計計算。D3是一個JavaScript庫,用戶可以用它創(chuàng)建可視化圖形,并使用Web瀏覽器與之交互(比如放大、縮小、收起和展開) 。R、Python和D3都非常適用于嵌入式統(tǒng)計,有幾個原因:

因為它們是獨立的編程語言,可以輕松地通過標準語言機制跟其它系統(tǒng)交互,或者也可以通過導(dǎo)入及導(dǎo)出各種格式的數(shù)據(jù)。

Python和R中的腳本可以直接嵌入到更大的分析工作流中。

Python和R程序可以直接用來構(gòu)建應(yīng)用程序,這些應(yīng)用程序可以從各種數(shù)據(jù)源讀取數(shù)據(jù),用戶可以直接通過Web跟這些應(yīng)用程序做數(shù)據(jù)分析及可視化的交互。

借助D3,用戶可以通過Web瀏覽器交互式地操作統(tǒng)計圖形,將分析提升到更高水平。

它們比專業(yè)的統(tǒng)計包更靠近程序員的思維框架。

除了D3,這個表中的所有東西都提供了進行高級統(tǒng)計(比如多元和時間序列分析)的設(shè)施,或者自身具備,或者通過類庫實現(xiàn)。盡管其中的每一個都有側(cè)重點,更適合解決特定的目標問題。比如Python的Pandas包,善于支持時間序列分析,因為它就是為了對財務(wù)數(shù)據(jù)做這樣的分析而寫的。

Python的統(tǒng)計生態(tài)系統(tǒng)

現(xiàn)如今用來做統(tǒng)計的最流行的通用編程語言就是Python。在科學(xué)計算方面它總是受到青睞,還有幾個優(yōu)秀的Python工具可以用來完成更復(fù)雜的統(tǒng)計任務(wù)。Python中的基本科學(xué)庫是NumPy。它對Python的主要貢獻是一個同構(gòu)的多維數(shù)組,可以用來放操作數(shù)據(jù)的方法。它可以集成C/C++和Fortran,還有幾個函數(shù)可以用來執(zhí)行高級的數(shù)學(xué)及統(tǒng)計計算。它內(nèi)部主要用的是自己的數(shù)據(jù)結(jié)構(gòu),用本地代碼實現(xiàn),所以在NumPy中執(zhí)行的矩陣計算比在Python中執(zhí)行相同的計算快得多。構(gòu)建在NumPy 之上的SciPy,提供了一些高層的數(shù)學(xué)和統(tǒng)計函數(shù)。SciPy再次處理了NumPy的數(shù)組;這些數(shù)組雖然很適合做數(shù)學(xué)計算,但處理可能會有缺失值的異構(gòu)數(shù)據(jù)時有一點繁瑣。為了解決這個問題,Pandas提供了靈活的異構(gòu)數(shù)據(jù)結(jié)構(gòu),很容易索引、切片,甚至合并和連接(類似于SQL表之間的連接)。 引入iPython是個很吸引人的設(shè)置,它是一個交互式的Python shell,有命令行補足、很好的歷史記錄,以及很多其它特性,在操作數(shù)據(jù)時特別有用。然后還可以用Matplotlib對結(jié)果可視化。


舉例說明

世界銀行是一個信息寶庫,并且它的很多數(shù)據(jù)都可以通過Web訪問。對于更復(fù)雜的分析,公眾可以從世界銀行的數(shù)據(jù)目錄下載數(shù)據(jù),或通過API訪問它。最受歡迎的數(shù)據(jù)集是世界發(fā)展指標(WDI)。根據(jù)世界銀行的說法,WDI包含“最新、最準確的全球發(fā)展數(shù)據(jù),包含國家、地球和全球的估算?!?WDI有兩種可下載的格式:Microsoft Excel和逗號分隔值(CSV)文件。 (因為 Microsoft Excel文件不適合編程分析,所以我們在這里處理的是CSV文件。)


圖1.計算世界發(fā)展指標相關(guān)性的Python程序。這個程序采集了最前面30個測量最多的指標,計算斯皮爾曼相關(guān)系數(shù),并用圖形顯示結(jié)果。

WDI CSV包是一個42.5M的壓縮文檔。下載并解壓后,你會見到主文件WDI_Data.csv。獲得該文件內(nèi)容概覽的好辦法是交互地檢查它。因為我們要用Python,所以跟我們要用的那些工具交互的最好辦法是發(fā)起一個iPython會話,然后加載數(shù)據(jù):

In [1]: import pandas as pd

In [2]: data = pd.read_csv(“WDI_Data.csv”)

結(jié)果在data中,一個包含數(shù)據(jù)的DataFrame。你可以把DataFrame看作一個二維數(shù)組,有一些易于操作的額外功能。在一個DataFrame中,數(shù)據(jù)被組織為幾列和一個索引 (與行對應(yīng))。如果我們輸入

In [3]: data.columns

我們會得到顯示列名的輸出:國家名、國家代碼、指標名、指標代碼。這些后面都跟著從1960到2012年每年的數(shù)據(jù)列。類似的,如果我們輸入

In [4]: data.index

我們會看到數(shù)據(jù)有317,094行。每一行都對應(yīng)一個國家一個特定指標從1960到2012年的值;一行中沒有值的年份表明那一年在那個國家中沒有測量這一指標。我們先看一下有多少指標

In [5]: len(data[‘Indicator Name’].unique())

Out[5]: 1289

然后看一下有多少國家

In [6]: len(data[‘Country Name’].unique())

Out[6]: 246

現(xiàn)在我們有一個要解決的問題:這些指標是彼此獨立的,還是其中有些相互關(guān)聯(lián)?

因為我們是按年份和國家測量的指標,所以我們必須確定讓哪個參數(shù)保持恒定,從而更精確地定義這個問題。一般而言,當樣本增加時,我們會得到更好的統(tǒng)計結(jié)果。然后重新表述這個問題就變得有意義了:哪一年的測量結(jié)果最多,測量最多的指標是獨立的,還是其中一些彼此相關(guān)?所謂“測量最多的指標”,是指那些在更多國家中測量的指標。事實證明,我們可以在大約50個LOC中找到問題的答案。圖一中是完整的程序。

代碼1–10行導(dǎo)入了我們將要用到的庫。第11行讀取數(shù)據(jù)。在第13行中,我們給出了一個數(shù)值,這是我們要檢查的測量最多的指標的個數(shù)。在第15行,我們找到了從0開始的帶有年度測量值的第一列。在那之后,我們可以在第17行找到有最多測量值的那一列(2005年)。然后我們?nèi)サ袅藳]有那些測量結(jié)果的所有數(shù)據(jù)。在第20到26行,我們獲取了測量最多的指標。

真正的統(tǒng)計計算從第28行開始,我們準備了一個表,用來存放每對指標相關(guān)性的結(jié)果值。在接下來的循環(huán)中,我們計算每對指標的相關(guān)性,并把它放在之前準備好的表中。最后,在第41到52行,我們把這些結(jié)果顯示在屏幕上,并保存為一個PDF文件(見圖二)。我們還把相關(guān)矩陣的垂直順序做了反向處理,以便讓最重要的指標出現(xiàn)在矩陣的頂部(代碼41和49行)。

對角線上有完美的相關(guān)性—理應(yīng)如此,因為那里檢查的是相同的指標。除此之外,我們的確看到了有些指標之間有相關(guān)性—有些是正相關(guān)的,甚至很強,也有些是負相關(guān)或者非常的負相關(guān)。

Python生態(tài)系統(tǒng)中更高級的組件

因為Python受到了科研界的青睞,一些專業(yè)化的工具也隨之出現(xiàn)。其中有構(gòu)建在NumPy、SciPy和matplotlib之上的Scikit-learn,它提供了完備的機器學(xué)習(xí)工具包。對于符合層級結(jié)構(gòu)的超大型數(shù)據(jù)集,Python提供了PyTables,它以HDF5 庫為基礎(chǔ)。這是一個行業(yè)熱點, DARPA 在2013年從XDATA項目基金中拿出300萬美元給Continuum Analytics作為獎勵,讓它進一步推進Python數(shù)據(jù)分析工具的開發(fā)??梢灶A(yù)料到的是接下來的幾年這個生態(tài)系統(tǒng)仍將穩(wěn)步發(fā)展。

用于統(tǒng)計計算的R項目

R是做統(tǒng)計的語言。可以這么說,Python讓做統(tǒng)計變成了程序員的活,而R讓寫程序變成了統(tǒng)計人員的任務(wù)。這門語言的中心是有效操作表示統(tǒng)計數(shù)據(jù)集的對象。這些對象通常是向量、列表,和表示按行和列組織的數(shù)據(jù)集的數(shù)據(jù)幀。R有常用的流程控制結(jié)構(gòu),甚至用到了面向?qū)ο缶幊痰乃枷?盡管它的面向?qū)ο髮崿F(xiàn)跟我們在更傳統(tǒng)的面向?qū)ο笳Z言中的概念有很大差別)。R的卓越之處在于它所提供的各種統(tǒng)計類庫。R的類庫中幾乎實現(xiàn)了所有的統(tǒng)計測試或方法(然而在Python中,有時你可能會發(fā)現(xiàn)你必須推出自己的實現(xiàn))。為了讓你明白它看起來是什么樣的,圖三給出了一個跟圖一一樣的程序,相同的邏輯,但實現(xiàn)用的是R而不是Python。

組合、聯(lián)合、整合嵌入式分析技術(shù)

我們在本文中給出的例子是不同應(yīng)用程序合并到一起處理大數(shù)據(jù)的典型辦法。數(shù)據(jù)從源頭(以某種原始格式)流向我們的統(tǒng)計包可接受的格式。統(tǒng)計包必須有一些能夠操作和查詢數(shù)據(jù)的辦法,以便我們能取得想要檢查的數(shù)據(jù)子集。這些都是統(tǒng)計分析必須有的。統(tǒng)計分析的結(jié)果可以用文本格式或圖形渲染出來。我們可以在本地計算機上執(zhí)行這一處理,也可以通過Web完成(此時數(shù)據(jù)的運算和處理是由服務(wù)器執(zhí)行的,參數(shù)、結(jié)果和圖形要通過Web瀏覽器)。這是一個很強大的概念,因為許多不同的設(shè)定,從ERP框架到汽車診斷軟件,都可以將數(shù)據(jù)導(dǎo)出為CSV這樣簡單的格式—實際上,當我們遇到一個不允許導(dǎo)出任何東西,封閉并且有專有數(shù)據(jù)格式的軟件時,應(yīng)該視作是一種警告。

要想按你想要的方式分析數(shù)據(jù),你必須首先能夠訪問到它。所以你應(yīng)該通過各種手段選擇那些可以促進數(shù)據(jù)交換的技術(shù),或者通過簡單的導(dǎo)出機制,或者通過適當?shù)恼{(diào)用,比如通過一個REST(表述性狀態(tài)轉(zhuǎn)移)API。

數(shù)據(jù)一直在變大,所以你必須進行調(diào)研,看你正在考慮的工具能否勝任你的數(shù)據(jù)處理工作。你沒必要在主存中處理所有數(shù)據(jù)。比如說,R有一個 大內(nèi)存 庫,讓我們用共享內(nèi)存和內(nèi)存映射文件處理超大數(shù)據(jù)集。還有,要確保軟件包不僅能處理大量輸入,還要能處理大型數(shù)據(jù)結(jié)構(gòu):比如說,如果表的大小被限定在32位整型之內(nèi),你就不能處理有5百萬條記錄的表。

在上面的例子中,警覺的讀者可能已經(jīng)注意到了,我們將數(shù)據(jù)變成適于統(tǒng)計分析的格式所用的代碼,要比統(tǒng)計分析本身的代碼還多,不管怎么說,那是由已經(jīng)寫好的函數(shù)做的。我們的例子有點兒小,所以預(yù)處理和真正的處理兩者的比例可能尤其顯得頭重腳輕,但這個例子也表明了這一事實,即數(shù)據(jù)操作通常和數(shù)據(jù)分析同樣重要(和苛刻)。實際上,R和NumPy/SciPy 真正的實力并不在于它們掌握了統(tǒng)計算法,而是在于它們知道如何有效地處理它們提供的數(shù)據(jù)結(jié)構(gòu)。并且這基本上是程序員的工作,不是統(tǒng)計學(xué)家的。別處還

數(shù)據(jù)分析咨詢請掃描二維碼

若不方便掃碼,搜微信號:CDAshujufenxi

數(shù)據(jù)分析師資訊
更多

OK
客服在線
立即咨詢
客服在線
立即咨詢
') } function initGt() { var handler = function (captchaObj) { captchaObj.appendTo('#captcha'); captchaObj.onReady(function () { $("#wait").hide(); }).onSuccess(function(){ $('.getcheckcode').removeClass('dis'); $('.getcheckcode').trigger('click'); }); window.captchaObj = captchaObj; }; $('#captcha').show(); $.ajax({ url: "/login/gtstart?t=" + (new Date()).getTime(), // 加隨機數(shù)防止緩存 type: "get", dataType: "json", success: function (data) { $('#text').hide(); $('#wait').show(); // 調(diào)用 initGeetest 進行初始化 // 參數(shù)1:配置參數(shù) // 參數(shù)2:回調(diào),回調(diào)的第一個參數(shù)驗證碼對象,之后可以使用它調(diào)用相應(yīng)的接口 initGeetest({ // 以下 4 個配置參數(shù)為必須,不能缺少 gt: data.gt, challenge: data.challenge, offline: !data.success, // 表示用戶后臺檢測極驗服務(wù)器是否宕機 new_captcha: data.new_captcha, // 用于宕機時表示是新驗證碼的宕機 product: "float", // 產(chǎn)品形式,包括:float,popup width: "280px", https: true // 更多配置參數(shù)說明請參見:http://docs.geetest.com/install/client/web-front/ }, handler); } }); } function codeCutdown() { if(_wait == 0){ //倒計時完成 $(".getcheckcode").removeClass('dis').html("重新獲取"); }else{ $(".getcheckcode").addClass('dis').html("重新獲取("+_wait+"s)"); _wait--; setTimeout(function () { codeCutdown(); },1000); } } function inputValidate(ele,telInput) { var oInput = ele; var inputVal = oInput.val(); var oType = ele.attr('data-type'); var oEtag = $('#etag').val(); var oErr = oInput.closest('.form_box').next('.err_txt'); var empTxt = '請輸入'+oInput.attr('placeholder')+'!'; var errTxt = '請輸入正確的'+oInput.attr('placeholder')+'!'; var pattern; if(inputVal==""){ if(!telInput){ errFun(oErr,empTxt); } return false; }else { switch (oType){ case 'login_mobile': pattern = /^1[3456789]\d{9}$/; if(inputVal.length==11) { $.ajax({ url: '/login/checkmobile', type: "post", dataType: "json", data: { mobile: inputVal, etag: oEtag, page_ur: window.location.href, page_referer: document.referrer }, success: function (data) { } }); } break; case 'login_yzm': pattern = /^\d{6}$/; break; } if(oType=='login_mobile'){ } if(!!validateFun(pattern,inputVal)){ errFun(oErr,'') if(telInput){ $('.getcheckcode').removeClass('dis'); } }else { if(!telInput) { errFun(oErr, errTxt); }else { $('.getcheckcode').addClass('dis'); } return false; } } return true; } function errFun(obj,msg) { obj.html(msg); if(msg==''){ $('.login_submit').removeClass('dis'); }else { $('.login_submit').addClass('dis'); } } function validateFun(pat,val) { return pat.test(val); }