
用于大數(shù)據(jù)的嵌入式分析和統(tǒng)計
用于大數(shù)據(jù)[注]的嵌入式分析和統(tǒng)計已經(jīng)成為了業(yè)內一個重要的主題。隨著數(shù)據(jù)量的不斷增長,我們需要軟件工程師對數(shù)據(jù)分析提供支持,并對數(shù)據(jù)進行一些統(tǒng)計計算。本文概要地介紹了嵌入式數(shù)據(jù)分析和統(tǒng)計的相關工具及類庫,其中包括獨立的軟件包和帶有統(tǒng)計能力的編程語言。我期待著收到本專欄讀者和潛在的專欄作者的反饋,告訴我你們對這個專欄的想法,以及你們想要了解哪些相關技術?!狢hristof Ebert
不管在信息技術界還是嵌入式技術界,大數(shù)據(jù)都已經(jīng)變成了非常關鍵的概念。1 這樣的軟件系統(tǒng)通常都有眾多的異構連接,包括軟件應用程序、中間件和傳感器之類的組件。隨著云設施的使用不斷增長,可用的數(shù)據(jù)資源變得更加豐富了;智能電網(wǎng)、智能車輛技術、醫(yī)藥最近都出現(xiàn)了這種相互連接的數(shù)據(jù)源。我們每年生產(chǎn)的數(shù)據(jù)將近1,200艾字節(jié),并且這一數(shù)字有增無減。2,3 這樣海量的非結構化數(shù)據(jù)是業(yè)務和IT主管[注]無法回避的巨大挑戰(zhàn)。
大數(shù)據(jù)的定義由四個維度組成:數(shù)據(jù)量、數(shù)據(jù)源的復雜度、生產(chǎn)速度,以及潛在用戶數(shù)。這些數(shù)據(jù)需要被組織起來,將無數(shù)的位和字節(jié)轉換成可操作的信息—除非我們能提煉出其中的含義,否則數(shù)據(jù)再豐富都沒用。在以前,程序員是寫代碼的,而統(tǒng)計學家是做統(tǒng)計的。程序員一般用通用的編程語言,而統(tǒng)計學家一般用專門的程序完成自己的日常工作,比如IBM的SPSS (用于社會科學的統(tǒng)計軟件包)。統(tǒng)計學家擺弄的國家統(tǒng)計數(shù)據(jù)或市場調研通常只有選定人群能用,而程序員處理的大量數(shù)據(jù)都是放在數(shù)據(jù)庫或日志文件中的。從云到幾乎所有人都可用的大數(shù)據(jù)改變了這一切。
隨著數(shù)據(jù)量和數(shù)據(jù)類型的不斷增加,越來越需要軟件工程師參與進來對它們做不同的統(tǒng)計分析。軟件工程師積極地以前所未有的規(guī)模收集和分析數(shù)據(jù),讓它們變得有價值,拓展新的業(yè)務模型。1 比如說,考慮一下主動性維護。我們可以持續(xù)地對機器、網(wǎng)絡進行監(jiān)測,一旦發(fā)現(xiàn)違規(guī)和失效,則立即處理,從而讓我們可以在破壞發(fā)生或系統(tǒng)癱瘓之前糾正它們。這可以從材料成本以及人工介入兩方面降低維護成本。處理數(shù)據(jù)并找出其中的含義通常只是一個大項目中的一部分工作,或者只是嵌在某些軟件中,配置中,或硬件優(yōu)化問題中。幸運的是,大數(shù)據(jù)社區(qū)已經(jīng)對這種需求作出了響應,他們創(chuàng)建了一系列的工具,可以將統(tǒng)計學家的一些魔力交給程序員—實際上,這些工具通常要比傳統(tǒng)的統(tǒng)計工具更強大,因為它們能處理的數(shù)據(jù)量在規(guī)模上要比老的統(tǒng)計樣本幅度更大。
用于嵌入式分析和統(tǒng)計的技術
可以執(zhí)行統(tǒng)計分析的軟件有很多;表一給出了一些最流行的軟件。它們的區(qū)別在于用戶對它們統(tǒng)計復雜度的要求,易用性,以及它們是獨立的軟件包,還是帶有統(tǒng)計能力的編程語言。
表一中有三項很值得我們注意:R、Python、D3 (數(shù)據(jù)驅動文檔Data- Drives-Documents)。R是一門面向統(tǒng)計的語言。Python是一門通用的編程語言,并且已經(jīng)證實在科學家和研究人員中間很流行,他們會用它作科學及統(tǒng)計計算。D3是一個JavaScript庫,用戶可以用它創(chuàng)建可視化圖形,并使用Web瀏覽器與之交互(比如放大、縮小、收起和展開) 。R、Python和D3都非常適用于嵌入式統(tǒng)計,有幾個原因:
因為它們是獨立的編程語言,可以輕松地通過標準語言機制跟其它系統(tǒng)交互,或者也可以通過導入及導出各種格式的數(shù)據(jù)。
Python和R中的腳本可以直接嵌入到更大的分析工作流中。
Python和R程序可以直接用來構建應用程序,這些應用程序可以從各種數(shù)據(jù)源讀取數(shù)據(jù),用戶可以直接通過Web跟這些應用程序做數(shù)據(jù)分析及可視化的交互。
借助D3,用戶可以通過Web瀏覽器交互式地操作統(tǒng)計圖形,將分析提升到更高水平。
它們比專業(yè)的統(tǒng)計包更靠近程序員的思維框架。
除了D3,這個表中的所有東西都提供了進行高級統(tǒng)計(比如多元和時間序列分析)的設施,或者自身具備,或者通過類庫實現(xiàn)。盡管其中的每一個都有側重點,更適合解決特定的目標問題。比如Python的Pandas包,善于支持時間序列分析,因為它就是為了對財務數(shù)據(jù)做這樣的分析而寫的。
Python的統(tǒng)計生態(tài)系統(tǒng)
現(xiàn)如今用來做統(tǒng)計的最流行的通用編程語言就是Python。在科學計算方面它總是受到青睞,還有幾個優(yōu)秀的Python工具可以用來完成更復雜的統(tǒng)計任務。Python中的基本科學庫是NumPy。它對Python的主要貢獻是一個同構的多維數(shù)組,可以用來放操作數(shù)據(jù)的方法。它可以集成C/C++和Fortran,還有幾個函數(shù)可以用來執(zhí)行高級的數(shù)學及統(tǒng)計計算。它內部主要用的是自己的數(shù)據(jù)結構,用本地代碼實現(xiàn),所以在NumPy中執(zhí)行的矩陣計算比在Python中執(zhí)行相同的計算快得多。構建在NumPy 之上的SciPy,提供了一些高層的數(shù)學和統(tǒng)計函數(shù)。SciPy再次處理了NumPy的數(shù)組;這些數(shù)組雖然很適合做數(shù)學計算,但處理可能會有缺失值的異構數(shù)據(jù)時有一點繁瑣。為了解決這個問題,Pandas提供了靈活的異構數(shù)據(jù)結構,很容易索引、切片,甚至合并和連接(類似于SQL表之間的連接)。 引入iPython是個很吸引人的設置,它是一個交互式的Python shell,有命令行補足、很好的歷史記錄,以及很多其它特性,在操作數(shù)據(jù)時特別有用。然后還可以用Matplotlib對結果可視化。
舉例說明
世界銀行是一個信息寶庫,并且它的很多數(shù)據(jù)都可以通過Web訪問。對于更復雜的分析,公眾可以從世界銀行的數(shù)據(jù)目錄下載數(shù)據(jù),或通過API訪問它。最受歡迎的數(shù)據(jù)集是世界發(fā)展指標(WDI)。根據(jù)世界銀行的說法,WDI包含“最新、最準確的全球發(fā)展數(shù)據(jù),包含國家、地球和全球的估算?!?WDI有兩種可下載的格式:Microsoft Excel和逗號分隔值(CSV)文件。 (因為 Microsoft Excel文件不適合編程分析,所以我們在這里處理的是CSV文件。)
圖1.計算世界發(fā)展指標相關性的Python程序。這個程序采集了最前面30個測量最多的指標,計算斯皮爾曼相關系數(shù),并用圖形顯示結果。
WDI CSV包是一個42.5M的壓縮文檔。下載并解壓后,你會見到主文件WDI_Data.csv。獲得該文件內容概覽的好辦法是交互地檢查它。因為我們要用Python,所以跟我們要用的那些工具交互的最好辦法是發(fā)起一個iPython會話,然后加載數(shù)據(jù):
In [1]: import pandas as pd
In [2]: data = pd.read_csv(“WDI_Data.csv”)
結果在data中,一個包含數(shù)據(jù)的DataFrame。你可以把DataFrame看作一個二維數(shù)組,有一些易于操作的額外功能。在一個DataFrame中,數(shù)據(jù)被組織為幾列和一個索引 (與行對應)。如果我們輸入
In [3]: data.columns
我們會得到顯示列名的輸出:國家名、國家代碼、指標名、指標代碼。這些后面都跟著從1960到2012年每年的數(shù)據(jù)列。類似的,如果我們輸入
In [4]: data.index
我們會看到數(shù)據(jù)有317,094行。每一行都對應一個國家一個特定指標從1960到2012年的值;一行中沒有值的年份表明那一年在那個國家中沒有測量這一指標。我們先看一下有多少指標
In [5]: len(data[‘Indicator Name’].unique())
Out[5]: 1289
然后看一下有多少國家
In [6]: len(data[‘Country Name’].unique())
Out[6]: 246
現(xiàn)在我們有一個要解決的問題:這些指標是彼此獨立的,還是其中有些相互關聯(lián)?
因為我們是按年份和國家測量的指標,所以我們必須確定讓哪個參數(shù)保持恒定,從而更精確地定義這個問題。一般而言,當樣本增加時,我們會得到更好的統(tǒng)計結果。然后重新表述這個問題就變得有意義了:哪一年的測量結果最多,測量最多的指標是獨立的,還是其中一些彼此相關?所謂“測量最多的指標”,是指那些在更多國家中測量的指標。事實證明,我們可以在大約50個LOC中找到問題的答案。圖一中是完整的程序。
代碼1–10行導入了我們將要用到的庫。第11行讀取數(shù)據(jù)。在第13行中,我們給出了一個數(shù)值,這是我們要檢查的測量最多的指標的個數(shù)。在第15行,我們找到了從0開始的帶有年度測量值的第一列。在那之后,我們可以在第17行找到有最多測量值的那一列(2005年)。然后我們去掉了沒有那些測量結果的所有數(shù)據(jù)。在第20到26行,我們獲取了測量最多的指標。
真正的統(tǒng)計計算從第28行開始,我們準備了一個表,用來存放每對指標相關性的結果值。在接下來的循環(huán)中,我們計算每對指標的相關性,并把它放在之前準備好的表中。最后,在第41到52行,我們把這些結果顯示在屏幕上,并保存為一個PDF文件(見圖二)。我們還把相關矩陣的垂直順序做了反向處理,以便讓最重要的指標出現(xiàn)在矩陣的頂部(代碼41和49行)。
對角線上有完美的相關性—理應如此,因為那里檢查的是相同的指標。除此之外,我們的確看到了有些指標之間有相關性—有些是正相關的,甚至很強,也有些是負相關或者非常的負相關。
Python生態(tài)系統(tǒng)中更高級的組件
因為Python受到了科研界的青睞,一些專業(yè)化的工具也隨之出現(xiàn)。其中有構建在NumPy、SciPy和matplotlib之上的Scikit-learn,它提供了完備的機器學習工具包。對于符合層級結構的超大型數(shù)據(jù)集,Python提供了PyTables,它以HDF5 庫為基礎。這是一個行業(yè)熱點, DARPA 在2013年從XDATA項目基金中拿出300萬美元給Continuum Analytics作為獎勵,讓它進一步推進Python數(shù)據(jù)分析工具的開發(fā)。可以預料到的是接下來的幾年這個生態(tài)系統(tǒng)仍將穩(wěn)步發(fā)展。
用于統(tǒng)計計算的R項目
R是做統(tǒng)計的語言??梢赃@么說,Python讓做統(tǒng)計變成了程序員的活,而R讓寫程序變成了統(tǒng)計人員的任務。這門語言的中心是有效操作表示統(tǒng)計數(shù)據(jù)集的對象。這些對象通常是向量、列表,和表示按行和列組織的數(shù)據(jù)集的數(shù)據(jù)幀。R有常用的流程控制結構,甚至用到了面向對象編程的思想(盡管它的面向對象實現(xiàn)跟我們在更傳統(tǒng)的面向對象語言中的概念有很大差別)。R的卓越之處在于它所提供的各種統(tǒng)計類庫。R的類庫中幾乎實現(xiàn)了所有的統(tǒng)計測試或方法(然而在Python中,有時你可能會發(fā)現(xiàn)你必須推出自己的實現(xiàn))。為了讓你明白它看起來是什么樣的,圖三給出了一個跟圖一一樣的程序,相同的邏輯,但實現(xiàn)用的是R而不是Python。
組合、聯(lián)合、整合嵌入式分析技術
我們在本文中給出的例子是不同應用程序合并到一起處理大數(shù)據(jù)的典型辦法。數(shù)據(jù)從源頭(以某種原始格式)流向我們的統(tǒng)計包可接受的格式。統(tǒng)計包必須有一些能夠操作和查詢數(shù)據(jù)的辦法,以便我們能取得想要檢查的數(shù)據(jù)子集。這些都是統(tǒng)計分析必須有的。統(tǒng)計分析的結果可以用文本格式或圖形渲染出來。我們可以在本地計算機上執(zhí)行這一處理,也可以通過Web完成(此時數(shù)據(jù)的運算和處理是由服務器執(zhí)行的,參數(shù)、結果和圖形要通過Web瀏覽器)。這是一個很強大的概念,因為許多不同的設定,從ERP框架到汽車診斷軟件,都可以將數(shù)據(jù)導出為CSV這樣簡單的格式—實際上,當我們遇到一個不允許導出任何東西,封閉并且有專有數(shù)據(jù)格式的軟件時,應該視作是一種警告。
要想按你想要的方式分析數(shù)據(jù),你必須首先能夠訪問到它。所以你應該通過各種手段選擇那些可以促進數(shù)據(jù)交換的技術,或者通過簡單的導出機制,或者通過適當?shù)恼{用,比如通過一個REST(表述性狀態(tài)轉移)API。
數(shù)據(jù)一直在變大,所以你必須進行調研,看你正在考慮的工具能否勝任你的數(shù)據(jù)處理工作。你沒必要在主存中處理所有數(shù)據(jù)。比如說,R有一個 大內存 庫,讓我們用共享內存和內存映射文件處理超大數(shù)據(jù)集。還有,要確保軟件包不僅能處理大量輸入,還要能處理大型數(shù)據(jù)結構:比如說,如果表的大小被限定在32位整型之內,你就不能處理有5百萬條記錄的表。
在上面的例子中,警覺的讀者可能已經(jīng)注意到了,我們將數(shù)據(jù)變成適于統(tǒng)計分析的格式所用的代碼,要比統(tǒng)計分析本身的代碼還多,不管怎么說,那是由已經(jīng)寫好的函數(shù)做的。我們的例子有點兒小,所以預處理和真正的處理兩者的比例可能尤其顯得頭重腳輕,但這個例子也表明了這一事實,即數(shù)據(jù)操作通常和數(shù)據(jù)分析同樣重要(和苛刻)。實際上,R和NumPy/SciPy 真正的實力并不在于它們掌握了統(tǒng)計算法,而是在于它們知道如何有效地處理它們提供的數(shù)據(jù)結構。并且這基本上是程序員的工作,不是統(tǒng)計學家的。別處還
數(shù)據(jù)分析咨詢請掃描二維碼
若不方便掃碼,搜微信號:CDAshujufenxi
SQL Server 中 CONVERT 函數(shù)的日期轉換:從基礎用法到實戰(zhàn)優(yōu)化 在 SQL Server 的數(shù)據(jù)處理中,日期格式轉換是高頻需求 —— 無論 ...
2025-09-18MySQL 大表拆分與關聯(lián)查詢效率:打破 “拆分必慢” 的認知誤區(qū) 在 MySQL 數(shù)據(jù)庫管理中,“大表” 始終是性能優(yōu)化繞不開的話題。 ...
2025-09-18CDA 數(shù)據(jù)分析師:表結構數(shù)據(jù) “獲取 - 加工 - 使用” 全流程的賦能者 表結構數(shù)據(jù)(如數(shù)據(jù)庫表、Excel 表、CSV 文件)是企業(yè)數(shù)字 ...
2025-09-18DSGE 模型中的 Et:理性預期算子的內涵、作用與應用解析 動態(tài)隨機一般均衡(Dynamic Stochastic General Equilibrium, DSGE)模 ...
2025-09-17Python 提取 TIF 中地名的完整指南 一、先明確:TIF 中的地名有哪兩種存在形式? 在開始提取前,需先判斷 TIF 文件的類型 —— ...
2025-09-17CDA 數(shù)據(jù)分析師:解鎖表結構數(shù)據(jù)特征價值的專業(yè)核心 表結構數(shù)據(jù)(以 “行 - 列” 規(guī)范存儲的結構化數(shù)據(jù),如數(shù)據(jù)庫表、Excel 表、 ...
2025-09-17Excel 導入數(shù)據(jù)含缺失值?詳解 dropna 函數(shù)的功能與實戰(zhàn)應用 在用 Python(如 pandas 庫)處理 Excel 數(shù)據(jù)時,“缺失值” 是高頻 ...
2025-09-16深入解析卡方檢驗與 t 檢驗:差異、適用場景與實踐應用 在數(shù)據(jù)分析與統(tǒng)計學領域,假設檢驗是驗證研究假設、判斷數(shù)據(jù)差異是否 “ ...
2025-09-16CDA 數(shù)據(jù)分析師:掌控表格結構數(shù)據(jù)全功能周期的專業(yè)操盤手 表格結構數(shù)據(jù)(以 “行 - 列” 存儲的結構化數(shù)據(jù),如 Excel 表、數(shù)據(jù) ...
2025-09-16MySQL 執(zhí)行計劃中 rows 數(shù)量的準確性解析:原理、影響因素與優(yōu)化 在 MySQL SQL 調優(yōu)中,EXPLAIN執(zhí)行計劃是核心工具,而其中的row ...
2025-09-15解析 Python 中 Response 對象的 text 與 content:區(qū)別、場景與實踐指南 在 Python 進行 HTTP 網(wǎng)絡請求開發(fā)時(如使用requests ...
2025-09-15CDA 數(shù)據(jù)分析師:激活表格結構數(shù)據(jù)價值的核心操盤手 表格結構數(shù)據(jù)(如 Excel 表格、數(shù)據(jù)庫表)是企業(yè)最基礎、最核心的數(shù)據(jù)形態(tài) ...
2025-09-15Python HTTP 請求工具對比:urllib.request 與 requests 的核心差異與選擇指南 在 Python 處理 HTTP 請求(如接口調用、數(shù)據(jù)爬取 ...
2025-09-12解決 pd.read_csv 讀取長浮點數(shù)據(jù)的科學計數(shù)法問題 為幫助 Python 數(shù)據(jù)從業(yè)者解決pd.read_csv讀取長浮點數(shù)據(jù)時的科學計數(shù)法問題 ...
2025-09-12CDA 數(shù)據(jù)分析師:業(yè)務數(shù)據(jù)分析步驟的落地者與價值優(yōu)化者 業(yè)務數(shù)據(jù)分析是企業(yè)解決日常運營問題、提升執(zhí)行效率的核心手段,其價值 ...
2025-09-12用 SQL 驗證業(yè)務邏輯:從規(guī)則拆解到數(shù)據(jù)把關的實戰(zhàn)指南 在業(yè)務系統(tǒng)落地過程中,“業(yè)務邏輯” 是連接 “需求設計” 與 “用戶體驗 ...
2025-09-11塔吉特百貨孕婦營銷案例:數(shù)據(jù)驅動下的精準零售革命與啟示 在零售行業(yè) “流量紅利見頂” 的當下,精準營銷成為企業(yè)突圍的核心方 ...
2025-09-11CDA 數(shù)據(jù)分析師與戰(zhàn)略 / 業(yè)務數(shù)據(jù)分析:概念辨析與協(xié)同價值 在數(shù)據(jù)驅動決策的體系中,“戰(zhàn)略數(shù)據(jù)分析”“業(yè)務數(shù)據(jù)分析” 是企業(yè) ...
2025-09-11Excel 數(shù)據(jù)聚類分析:從操作實踐到業(yè)務價值挖掘 在數(shù)據(jù)分析場景中,聚類分析作為 “無監(jiān)督分組” 的核心工具,能從雜亂數(shù)據(jù)中挖 ...
2025-09-10統(tǒng)計模型的核心目的:從數(shù)據(jù)解讀到?jīng)Q策支撐的價值導向 統(tǒng)計模型作為數(shù)據(jù)分析的核心工具,并非簡單的 “公式堆砌”,而是圍繞特定 ...
2025-09-10