Excel從入門到表格分析(二)
拆分列數(shù)據(jù)
為什么要拆分列數(shù)據(jù)呢?當某一維度存在多個細分列表的時候,我們往往需要對每個細分項進行統(tǒng)計計算操作,這是就需要拆分列數(shù)據(jù)。假設(shè)我們有以下類別數(shù)據(jù):

我們發(fā)現(xiàn),類別數(shù)據(jù)欄中的細分數(shù)據(jù)都是有|分隔開來。所以,我們可以使用Excel的分列功能對這一列進行分列:


這里選擇的分隔符是|。
經(jīng)過分列之后,每一個細分項會變成單獨一欄:

除了對現(xiàn)有數(shù)據(jù)進行拆分以外,我們還可以在導入數(shù)據(jù)的時候進行拆分處理。EXCEL提供了多種格式的導入選擇,CSV格式是一種常見的格式。CSV格式是除數(shù)據(jù)庫、EXCEL表格以外最常用的數(shù)據(jù)格式,它兼顧可讀性和便利性,是爬蟲最常用的存儲方式之一。CSV格式的數(shù)據(jù)一般是用特定的符號將每一列進行分隔的,常見的符號包括,逗號,\ttab符號,空格等。CSV的導入和現(xiàn)有數(shù)據(jù)的導入類似,同樣利用分列功能,使用特定符號進行分隔即可。
數(shù)據(jù)排序和篩選
為什么我們需要對數(shù)據(jù)進行排序呢?當我們拿到數(shù)據(jù)時,它極有可能是雜亂的,或者是按照數(shù)據(jù)錄入的時間或序號進行排列。如果我們想對數(shù)據(jù)有一個直觀的了解,比如對于工資表單數(shù)據(jù),我們想了解最低工資到最高工資的具體走勢,對工資進行排序則是首先需要進行的操作。
EXCEL本身提供了排序功能。需要注意的是,如果想要按照某一列的順序進行排序,應該先將此列的某一單元格選中,然后再使用排序功能,選擇排序順序的列進行排序。

需要注意的是,有的時候選擇的排序順序列為文本格式,即使將列的屬性改為數(shù)字也無法使其變成數(shù)字格式。文本格式的問題在于2會排在10后面,因為根據(jù)文本排序,10的第一位是1,小于2。對于文本列的情況,一個小竅門是將此列的值復制到一個輔助列,然后對此輔助列進行分列,分列的符號可以使用在文本中不出現(xiàn)的任何符號,比如-,分列的結(jié)果對應的列的格式就會變成數(shù)字格式。之后,我們可以根據(jù)新生成的輔助列對數(shù)據(jù)進行排序。還有一種對于文本列的排序方法是創(chuàng)建一個自定義的排序序列。比如我們想根據(jù)職務的大小進行排序:董事長、總經(jīng)理、副總經(jīng)理、組長。如何自定義排序序列呢?進入文件-選項,在彈出窗口中,點擊左側(cè)的“高級”,拖動到“常規(guī)”項目,然后點擊“編輯自定義序列”:


填寫好自定義序列后點擊“添加”即可創(chuàng)建對應的序列。
在之后的排序中,可以選擇順序為自定義序列進行排序:

在上述招聘信息表中,如果我們只想要了解與數(shù)據(jù)分析相關(guān)的崗位,需要對“職位名稱”這一列進行篩選。EXCEL提供了強大的篩選功能。點擊數(shù)據(jù)菜單欄中的篩選功能,選中欄的列頭會出現(xiàn)三角形狀的下拉篩選菜單,隨后我們可以根據(jù)關(guān)鍵字“數(shù)據(jù)分析”對職位名稱進行篩選:

如果想要進行精準搜索關(guān)鍵字“數(shù)據(jù)分析”,可以使用篩選菜單中的文本過濾器(Text Filters),然后選擇“等于”(Equals)條件:

之后,會彈出自定義文本過濾器,輸入精準查詢“數(shù)據(jù)分析”,即可得到篩選后的數(shù)據(jù):


邏輯函數(shù)
前面幾個章節(jié)主要涉及對數(shù)據(jù)預處理的操作,比如文本函數(shù)、數(shù)學函數(shù)、數(shù)據(jù)的去重分列、排序與篩選。這一章節(jié)主要介紹邏輯函數(shù),主要涉及邏輯值與邏輯判斷(與AND、或OR、非NOT)。邏輯值主要涉及真、假,可以使用英文(True, False)或者數(shù)字(0,1)來表示。邏輯運算中的與(AND)主要涉及數(shù)據(jù)的交集(1&&1=1, 1&&0=0, 0&&0=0),邏輯或(OR)主要涉及數(shù)據(jù)的并集(1||1=1, 1||0=1, 0||0=0),邏輯非(NOT)主要針對求反(!0=1, !1=0)。

上面這張表格列出了常見的邏輯函數(shù)的作用及其實現(xiàn)。其中的IF函數(shù)是邏輯判斷非常重要的函數(shù)。IF函數(shù)涉及到三個參數(shù),第一個參數(shù)是邏輯判斷值(可以是根據(jù)數(shù)據(jù)單元格產(chǎn)生的邏輯值),第二個和第三個參數(shù)分別對應邏輯判斷為TRUE或者FALSE的結(jié)果。下圖為微軟官方文檔給出的描述:

下面我們舉一個具體的例子來看如何靈活使用IF函數(shù)。
我們有一列為數(shù)據(jù)收集時間,現(xiàn)在的需求是要將時間換成時間區(qū)間:10點前算作早上,10點后12點前算作上午,12點后算作下午。如何通過邏輯函數(shù)IF將每一行的時間轉(zhuǎn)換成時間區(qū)間呢?

注意到,這里需要使用嵌套條件:如果時間中的小時部分小于10,打印早上;大于10小于12,打印上午;大于12,打印下午。由于時間列的值均為2位+冒號+2位,所以我們首先需要提取小時部分,使用INT函數(shù)和MID函數(shù):INT(MID(H2,1,2))可以獲得前兩位的數(shù)值,然后使用嵌套IF函數(shù):IF(INT(MID(H2,1,2))<10, "早上",IF(INT(MID(H2,1,2))<12, "上午", "下午")):

最后打印出:

條件聚合函數(shù)
前面我們介紹了邏輯函數(shù),這一章節(jié)我們介紹條件聚合函數(shù)。什么時候我們需要使用條件聚合函數(shù)呢?假設(shè)我們有對應不同工作地點的職位數(shù)量表:

現(xiàn)在我們想要統(tǒng)計一線城市的職位總數(shù)(一線城市包括北京、上海、廣州、深圳)。一個簡單的想法是直接使用SUM函數(shù),將這四個城市對應的職位數(shù)量單元格進行累加:

可以發(fā)現(xiàn),這種方法的弊端在于我們必須定位四個城市對應的職位數(shù)量單元格。由于SUM函數(shù)對于輸入的單元格相對固定,如果我們改變四個城市的職位數(shù)量單元格的位置,就會導致最終SUM結(jié)果計算錯誤。條件聚合函數(shù)SUMIFS就是用來解決SUM函數(shù)對于輸入單元格位置固定的問題。其實,我們不需要固定輸入單元格的位置,而是通過匹配條件自動判斷單元格位置。使用SUMIFS計算一線城市的職位總數(shù),可以使用公式:SUMIFS(C23:C34,B23:B34,{"北京","上海","廣州","深圳"}),但我們發(fā)現(xiàn)得到的結(jié)果只是北京的職位數(shù)量,這是因為SUMIFS的實際輸出為{125, 93, 48, 66}四個值,對應于四個城市的職位數(shù)量,所以我們需要在外面嵌套一個SUM函數(shù)從而得到四個城市的職位總數(shù):SUM(SUMIFS(C23:C34,B23:B34,{"北京","上海","廣州","深圳"}))

最后得到結(jié)果:

除了SUMIFS函數(shù),COUNTIF函數(shù)也是經(jīng)常使用的。從字面上可以看出,COUNTIF主要針對給定條件進行計數(shù)。假設(shè)我們現(xiàn)在需要統(tǒng)計數(shù)據(jù)分析相關(guān)的職位在不同城市的總個數(shù),部分數(shù)據(jù)如下:

首先,我們需要統(tǒng)計一共有多少城市??梢韵葘⒊鞘羞@一列復制,然后使用數(shù)據(jù)欄中的去重,得到所有城市名稱。

然后,我們可以使用COUNTIF函數(shù),對于每個城市統(tǒng)計職位個數(shù)。COUNTIF函數(shù)的最簡單形式為:COUNTIF(要檢查哪些區(qū)域? 要查找哪些內(nèi)容?),在我們這個例子中,區(qū)域為原始表格“城市”這一列,查找內(nèi)容為去重后的每一個城市名稱:

最后,
COUNTIF可以算出每個城市有多少職位數(shù):
總結(jié): 這一章節(jié)我們主要介紹了兩個常見的條件聚合函數(shù)。條件聚合函數(shù)主要是對符合特定條件的數(shù)據(jù)項進行統(tǒng)計,它可以是求和(SUM)或者計次(COUNT)。我們可以把它看成是數(shù)學函數(shù)與邏輯函數(shù)的結(jié)合,通過判斷是否符合某一個條件或某幾個條件來決定是否計入統(tǒng)計值。