資料分析師如何應對資料庫取數後的離線分析

xiaohuihui發表於2020-07-05

因為缺乏好用工具的支援,資料分析人員的離線分析動作總是先由一個事先寫好的複雜查詢或經多步驟處理後臨時表匯出的資料,之後在 Excel 中用 vlookup(),過濾器等來完成,當資料更新或範圍擴大後又要重新取數,重新在 Excel 中操作。如果能有一個桌面工具每次會實時讀取單表資料,既能完成上述複雜查詢和多步驟處理到臨時表的計算,又能取代在 Excel 中的計算動作,免除重複勞動,將會是很多資料分析人員的福音。

如果你會寫 SQL 或 VBA,非常在意獲取資料後能夠靈活的多次計算,而不是想用一個圖形介面工具完成有限的計算,又不想花費很多時間去學習 Python,集算器或許是一個不錯的選擇。

比如,資料庫裡有以下 3 張表:

SQL Query 1 result: (T1)

Col1 Col2 
A    1
B    2

Query 2 result: (T2)

Col3 Col4 
1    #
2    *

Query 3 result: (T3)

Col5   
1     
3


需要對上面 T1,T2,T3 三張表,完成類似下面 SQL 的關聯操作:

Select T1.col1,T2.col4 
        from T1,T2 
        where T1.col2=T2.col3 
        and T1.col2 in (Select T3.col5 from T3)

結果是:

Col1  Col4
A    #

如果資料量不大,直接記憶體計算,集算器 SPL 程式碼如下:

T1=DB.query("select Col1,Col2 from T1")
T2=DB.query("select Col3,Col4 from T2")
T3=DB.query("select Col5 from T3")
Result=T1.join@i(Col2,T2:Col3,Col1,Col4).select(T3.(Col5).contain(Col2)).new(Col1,Col4)

T1,T2,T3 也可以分別來自不同的資料庫或者資料檔案

如果資料量比較大,可以用集算器的遊標,和資料庫遊標類似,程式碼如下:

CS1=DB.cursor("select Col1,Col2 from T1 orderby Col2")
CS2=DB.cursor("select Col3,Col4 from T2 orderby Col3")
S3=DB.query@i("select Col5 from T3")
Result=joinx(CS1,Col2;CS2,Col3).select(S3.contain(#1.Col2)).new(#1.Col1,#2.Col4).fetch()

如果想利用最終計算後的結果在 Excel 中做圖表,匯出到 Excel 也很方便

file("Result.xlsx").xlsexport(Result)

集算器即裝即用,應對上述問題非常得心應手。集算器也支援先將大資料儲存成本地檔案,然後讀取這些型別已確定、已壓縮的資料做高效計算,這樣可以減輕資料庫的負載,也能讓本地計算效率更高。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69900830/viewspace-2702535/,如需轉載,請註明出處,否則將追究法律責任。

相關文章