隨著互聯(lián)網(wǎng)的快速發(fā)展,大數(shù)據(jù)時代的到來,數(shù)據(jù)資源的處理成了各行各業(yè)都面臨的熱點問題。除了通過特別專業(yè)、特別特別昂貴、特別特別特別復(fù)雜的分析平臺來處理特別x4海量的數(shù)據(jù)外,我們還常常會遇到Excel(xls,xlsx)文件這樣手邊能夠即時獲得的數(shù)據(jù)文件。使用Excel記錄、處理和交換數(shù)據(jù),是因為這個軟件的簡單方便,而如果又需要通過一堆外部調(diào)用來進行后續(xù)的分析處理,那就會顯得十分笨拙?,F(xiàn)在我們就來分享一下如果通過輕量級地使用集算器來分析處理Excel形式的數(shù)據(jù)來源。
成都創(chuàng)新互聯(lián)是一家專注于成都網(wǎng)站設(shè)計、成都網(wǎng)站建設(shè)與策劃設(shè)計,云龍網(wǎng)站建設(shè)哪家好?成都創(chuàng)新互聯(lián)做網(wǎng)站,專注于網(wǎng)站建設(shè)十多年,網(wǎng)設(shè)計領(lǐng)域的專業(yè)建站公司;建站業(yè)務(wù)涵蓋:云龍等地區(qū)。云龍做網(wǎng)站價格咨詢:13518219792
最近,中美貿(mào)易戰(zhàn)愈演愈烈,我們也來蹭一下熱度,用一些公開獲得的中美兩國的經(jīng)濟指標做個簡單對比,模擬一下實戰(zhàn)的場景,找一下掌上觀文,了如指掌,一切盡在掌握的感覺……
下面是我們用到的基礎(chǔ)數(shù)據(jù)文件Indicators.xlsx,其中,每個工作表是一個國家的各項指標:
接下來,我們打開集算器了,寫下第一行腳本:
=file(“Indicators.xlsx”) | =A1.xlsopen() |
然后我們把腳本文件保存到和Indicators.xlsx數(shù)據(jù)文件一個目錄下,以方便引用相對路徑,名稱就叫indicators.dfx。
說明一下,”=”開頭的格子稱為“計算格”,其中的表達式的計算結(jié)果會自動賦予單元格,后面的腳本中就可以用單元格名稱(A1、C25等等)來直接使用了。同時,這里用到了兩個函數(shù)。第一個是file()函數(shù),返回一個文件對象。參數(shù)”Indicators.xlsx”是文件名,因為這里寫的是相對路徑,所以會在indicators.dfx文件的同級目錄查找。第二個是xlsopen()函數(shù),把文件對象A1當做一個Excel工作簿對象打開。
集算器的好處是可以隨時進行測試,我們就來看一下現(xiàn)在的狀態(tài),點擊“執(zhí)行”圖標后,結(jié)果如下:
在右側(cè)面板,可以看到Excel文件被顯示為一個表格,除去最左側(cè)的序號列,第一列是工作表名稱,第二列和第三列分別是工作表的行列數(shù)。這三個字段構(gòu)成了一個數(shù)據(jù)結(jié)構(gòu)。若干條具有這個數(shù)據(jù)結(jié)構(gòu)的記錄組成了一個有序的集合,我們稱之為“序表”。如果有序集合中不是具有相同數(shù)據(jù)結(jié)構(gòu)的記錄,而只是一般的一些數(shù)據(jù)成員,那么我們就稱之為“序列”,所以說,序表是一種特殊的序列。集算器對于序列和序表提供了大量的函數(shù),能夠支持各種復(fù)雜運算,因此,這兩種數(shù)據(jù)對象在集算器中會經(jīng)常遇到。
接下來,我們就要讀取工作表的內(nèi)容了,先看腳本:
=B1.xlsimport@t() |
xlsimport()函數(shù)是從工作簿對象B1中導(dǎo)入一個工作表。這里用到了@t選項,這個選項會把首行內(nèi)容作為標題而不是數(shù)據(jù)(這是Excel表格常見的樣子)。選項需要寫在函數(shù)名后,以@開頭,多個選項只需要寫一個@,例如@tx。這里我們沒有使用參數(shù),所以函數(shù)會默認導(dǎo)入第一個工作表的全部內(nèi)容。再點下“執(zhí)行”看看結(jié)果,如下:
可以看到第一個工作表的內(nèi)容導(dǎo)入成了一個序表。不過這里我們會遇到第一個問題,每個經(jīng)濟指標Indicator包括兩行,第二行是指標更新的時間,是我們不關(guān)心的內(nèi)容。集算器的序表要解決這類問題非常簡單,加一個選出函數(shù)就可以了:
=B1.xlsimport@t().select(Indicator!=null) |
select()是選出函數(shù),參數(shù)Indicator!=null是選出條件,也就是根據(jù)Indicator列是不是空來決定是不是選擇這一行內(nèi)容,還是執(zhí)行看下效果:
篩選無效(不感興趣)數(shù)據(jù)的的問題已經(jīng)解決,繼續(xù)研究發(fā)現(xiàn)每個指標中的Last是我們需要關(guān)心的,因此我們希望只導(dǎo)入Indicator和Last字段。腳本調(diào)整如下:
=B1.xlsimport@t(Indicator,Last).select(Indicator!=null) |
這里用到了xlsimport()函數(shù)的選出字段參數(shù),”Indicator,Last”就是希望選出的字段名(逗號分隔)。接下來專門導(dǎo)入中國的數(shù)據(jù):
=B1.xlsimport@t(Indicator,Last;”China”).select(Indicator!=null) |
這里參數(shù)又增加了一個”China”,指定了要導(dǎo)入的工作表名稱,與前面的字段參數(shù)用”;”隔開。(還可以指定導(dǎo)入的開始行和結(jié)束行,因為例子中沒有用到就不介紹了,有興趣的話可以參考教程文檔試驗一下。)執(zhí)行后就可以看到中國的指標了:
現(xiàn)在開始進行簡單的比較,把兩個表根據(jù)Indicator連接起來:
=A2.join(Indicator,B2:Indicator,Last:’China’) |
這里使用到了join()函數(shù),用單元格A2的字段Indicator匹配單元格B2的鍵Indicator,找到相應(yīng)記錄后拼上B2的Last字段,并使用字段名’China’拼到A2序表中,如下圖:
然后把美國的Last更名為US:
=A2.join(Indicator,B2:Indicator,Last:’China’).rename(Last:’United States’) |
這里的rename()函數(shù)用來修改序表的字段名,每個字段修改用”:”映射,Last是曾用名,’United States’為新字段名:
前面提到過,集算器對于序列和序表提供了很多函數(shù)進行計算,用起來十分方便。這里我們就利用sort函數(shù),把中美指標按照差距大小進行排序:
=A3.sort@z(abs(‘United States’-‘China’)) |
這里用到了sort()函數(shù)進行排序,@z選項用來使結(jié)果降序排列。參數(shù)是用做排序依據(jù)的表達式,這里用美中指標進行了簡單的差值,然后用abs()函數(shù)計算絕對值。結(jié)果如下:
至此,需要的數(shù)據(jù)已經(jīng)整理好了。為了以后可以重復(fù)使用,我們把這個比較結(jié)果添加到工作簿的一個新工作表’US vs China’中,并寫回到源文件中:
>B1.xlsexport@t(A4;”US vs China”) | >A1.xlswrite(B1) |
前面提到過“=”開頭的是計算格,這里又遇到了一種”>”開頭的格子,我們稱之為“執(zhí)行格“。執(zhí)行格執(zhí)行后不會自動為單元格賦值。
這里用到的xlsexport()函數(shù)用來把序表A4寫到工作簿對象B1中,”:”隔開的第二個參數(shù)是工作表名稱。這里同樣用到了選項,這里的@t表示需要導(dǎo)出標題行到工作表中。而xlswrite()函數(shù)則把工作簿對象B1寫出到文件對象A1。
最后,我們打開excel文件查看一下最終結(jié)果:
簡單的幾行腳本,Excel文件多個工作表的導(dǎo)入、連接、排序、導(dǎo)出等功能就輕松實現(xiàn)了。這還只是揭開了集算器的一角,還有更多的功能等待著我們?nèi)ヌ剿骱蛻?yīng)用。
完整腳本參考如下:
A | B | |
1 | =file(“Indicators.xlsx”) | =A1.xlsopen() |
2 | =B1.xlsimport@t(Indicator,Last).select(Indicator!=null) | =B1.xlsimport@t(Indicator,Last;”China”).select(Indicator!=null) |
3 | =A2.join(Indicator,B2:Indicator,Last:’China’).rename(Last:’United States’) | |
4 | =A3.sort@z(abs(‘United States’-‘China’)) | |
5 | >B1.xlsexport@t(A4;”US vs China”) | >A1.xlswrite(B1) |