您好,登錄后才能下訂單哦!
隨著互聯網的快速發展,大數據時代的到來,數據資源的處理成了各行各業都面臨的熱點問題。除了通過特別專業、特別特別昂貴、特別特別特別復雜的分析平臺來處理特別x4海量的數據外,我們還常常會遇到Excel(xls,xlsx)文件這樣手邊能夠即時獲得的數據文件。使用Excel記錄、處理和交換數據,是因為這個軟件的簡單方便,而如果又需要通過一堆外部調用來進行后續的分析處理,那就會顯得十分笨拙。現在我們就來分享一下如果通過輕量級地使用集算器來分析處理Excel形式的數據來源。
最近,中美貿易戰愈演愈烈,我們也來蹭一下熱度,用一些公開獲得的中美兩國的經濟指標做個簡單對比,模擬一下實戰的場景,找一下掌上觀文,了如指掌,一切盡在掌握的感覺……
下面是我們用到的基礎數據文件Indicators.xlsx,其中,每個工作表是一個國家的各項指標:
接下來,我們打開集算器了,寫下第一行腳本:
=file(“Indicators.xlsx”) | =A1.xlsopen() |
然后我們把腳本文件保存到和Indicators.xlsx數據文件一個目錄下,以方便引用相對路徑,名稱就叫indicators.dfx。
說明一下,”=”開頭的格子稱為“計算格”,其中的表達式的計算結果會自動賦予單元格,后面的腳本中就可以用單元格名稱(A1、C25等等)來直接使用了。同時,這里用到了兩個函數。第一個是file()函數,返回一個文件對象。參數”Indicators.xlsx”是文件名,因為這里寫的是相對路徑,所以會在indicators.dfx文件的同級目錄查找。第二個是xlsopen()函數,把文件對象A1當做一個Excel工作簿對象打開。
集算器的好處是可以隨時進行測試,我們就來看一下現在的狀態,點擊“執行”圖標后,結果如下:
在右側面板,可以看到Excel文件被顯示為一個表格,除去最左側的序號列,第一列是工作表名稱,第二列和第三列分別是工作表的行列數。這三個字段構成了一個數據結構。若干條具有這個數據結構的記錄組成了一個有序的集合,我們稱之為“序表”。如果有序集合中不是具有相同數據結構的記錄,而只是一般的一些數據成員,那么我們就稱之為“序列”,所以說,序表是一種特殊的序列。集算器對于序列和序表提供了大量的函數,能夠支持各種復雜運算,因此,這兩種數據對象在集算器中會經常遇到。
接下來,我們就要讀取工作表的內容了,先看腳本:
=B1.xlsimport@t() |
xlsimport()函數是從工作簿對象B1中導入一個工作表。這里用到了@t選項,這個選項會把首行內容作為標題而不是數據(這是Excel表格常見的樣子)。選項需要寫在函數名后,以@開頭,多個選項只需要寫一個@,例如@tx。這里我們沒有使用參數,所以函數會默認導入第一個工作表的全部內容。再點下“執行”看看結果,如下:
可以看到第一個工作表的內容導入成了一個序表。不過這里我們會遇到第一個問題,每個經濟指標Indicator包括兩行,第二行是指標更新的時間,是我們不關心的內容。集算器的序表要解決這類問題非常簡單,加一個選出函數就可以了:
=B1.xlsimport@t().select(Indicator!=null) |
select()是選出函數,參數Indicator!=null是選出條件,也就是根據Indicator列是不是空來決定是不是選擇這一行內容,還是執行看下效果:
篩選無效(不感興趣)數據的的問題已經解決,繼續研究發現每個指標中的Last是我們需要關心的,因此我們希望只導入Indicator和Last字段。腳本調整如下:
=B1.xlsimport@t(Indicator,Last).select(Indicator!=null) |
這里用到了xlsimport()函數的選出字段參數,”Indicator,Last”就是希望選出的字段名(逗號分隔)。接下來專門導入中國的數據:
=B1.xlsimport@t(Indicator,Last;”China”).select(Indicator!=null) |
這里參數又增加了一個”China”,指定了要導入的工作表名稱,與前面的字段參數用”;”隔開。(還可以指定導入的開始行和結束行,因為例子中沒有用到就不介紹了,有興趣的話可以參考教程文檔試驗一下。)執行后就可以看到中國的指標了:
現在開始進行簡單的比較,把兩個表根據Indicator連接起來:
=A2.join(Indicator,B2:Indicator,Last:’China’) |
這里使用到了join()函數,用單元格A2的字段Indicator匹配單元格B2的鍵Indicator,找到相應記錄后拼上B2的Last字段,并使用字段名’China’拼到A2序表中,如下圖:
然后把美國的Last更名為US:
=A2.join(Indicator,B2:Indicator,Last:’China’).rename(Last:’United States’) |
這里的rename()函數用來修改序表的字段名,每個字段修改用”:”映射,Last是曾用名,’United States’為新字段名:
前面提到過,集算器對于序列和序表提供了很多函數進行計算,用起來十分方便。這里我們就利用sort函數,把中美指標按照差距大小進行排序:
=A3.sort@z(abs(‘United States’-‘China’)) |
這里用到了sort()函數進行排序,@z選項用來使結果降序排列。參數是用做排序依據的表達式,這里用美中指標進行了簡單的差值,然后用abs()函數計算絕對值。結果如下:
至此,需要的數據已經整理好了。為了以后可以重復使用,我們把這個比較結果添加到工作簿的一個新工作表’US vs China’中,并寫回到源文件中:
>B1.xlsexport@t(A4;”US vs China”) | >A1.xlswrite(B1) |
前面提到過“=”開頭的是計算格,這里又遇到了一種”>”開頭的格子,我們稱之為“執行格“。執行格執行后不會自動為單元格賦值。
這里用到的xlsexport()函數用來把序表A4寫到工作簿對象B1中,”:”隔開的第二個參數是工作表名稱。這里同樣用到了選項,這里的@t表示需要導出標題行到工作表中。而xlswrite()函數則把工作簿對象B1寫出到文件對象A1。
最后,我們打開excel文件查看一下最終結果:
簡單的幾行腳本,Excel文件多個工作表的導入、連接、排序、導出等功能就輕松實現了。這還只是揭開了集算器的一角,還有更多的功能等待著我們去探索和應用。
完整腳本參考如下:
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) |
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。