學會數據分析思維,學會透過事物看本質
來自專欄猴子聊數據分析4 人贊了文章
這段時間通過學習數據分析相關的知識,最大的變化就是看待事物更加喜歡去了解事物後面的本質,碰到問題後解決問題思路也發生了改變。
舉個具體的例子,我在學習數據分析,將來會考慮從事這方面的工作,需要掌握的相關專業知識這個問題暫且按下不表,那哪些具體的問題是我需要了解的呢,以下簡單羅列:
1、了解數據分析師這個崗位在各個地區的需求情況?
2、數據分析師的薪資待遇如何?
3、根據日後工作年限的增加,薪資待遇的增長情況會如何呢?
通過以上問題的簡單羅列,我已經完成了「我該怎樣進行數據分析?」的第一步:提出問題。那要進行數據分析,應該怎麼做?
數據分析的流程:
第一步:提出問題;
我們應該明白,一切進行數據分析的行為(目的)都是為了解決我們生活和工作中遇到的問題,明確的問題為我們將要進行的數據分析提供了目標和方向。
第二步:理解數據,可分為以下兩步驟:
1、採集數據:根據研究的問題,採集相關的數據;
2、查看採集到的數據集信息,其中包括描述統計信息,從整體上理解數據。
第三步:數據清理(數據預處理);
很多數據在被採集到的時候不符合我們數據分析的標準,裡面有很多「臟」數據或重複數據,這樣的數據我們就需要對它進行「整容」,把它處理成我們需要的樣子。
第四步:構建模型;
對清洗後的數據進行分析,一般簡單的要求是得出一些業務指標,複雜的可能需要運用機器學習演算法來訓練這個模型對數據進行分析。
第五步:數據可視化;
在與他人交流我們得出的研究成果的時候,最好的方式就是運用圖表展現。把得出的分析結果運用圖表展示給你的上級(老闆)或客戶。
當我們了解了數據分析的流程以後,我們就可以進行數據分析的操作了。回到上面提出的三個問題,有了明確的任務目標以後,那就是要進行第二步中的採集數據了,在這裡我使用 Gooseeker 這一款免費的數據採集工具(爬蟲工具)去前程無憂(51job)收集關鍵詞「數據分析」的相關職位信息,在嘗試的過程中碰到了很多問題,最大的感觸就是任何一個小問題都可能導致你偏離所達成的目標很大一截,要充分學會使用搜索工具找尋相應解決方案,很多情況下都需要舉一反三的去理解。
接下來我們要進行第三步,數據清理。打開我們收集的相關數據(考慮到爬蟲工作的工作效能問題,我只爬取了杭州市的數據作為分析對象),首先我們根據最初提出的三個問題來簡單判斷哪些內容是我們需要的必要欄位,哪些是不需要的,將不需要的欄位所屬列進行隱藏處理,養成好的習慣,不要輕易刪除數據,這樣在我們有可能出錯的時候可以通過保留的數據找回。
在查看數據的時候發現從「職位名稱」往後一直到「薪資待遇」其中「學歷」、「招聘人數」、「發布時間」這三項顯示的都是「工作年限」的內容,說明我們在數據抓取的時候設置某個參數時出現了錯誤,依據第一步提出的三個問題做判斷,得出結論出錯的三項內容為非必要欄位,將其做「隱藏」處理。註:如出錯的是必要欄位,例如:「薪資待遇」,那就要重新收集數據處理。
依據 Gooseeker 爬取規則的原理(二級頁面依據上一級列表頁的鏈接爬取),在這裡我們選擇用二級招聘信息內容展示頁鏈接為依據做去重操作,提示「未發現重複值」,說明我們採集的數據每一條都是唯一(具體步驟:選擇菜單欄中「數據」-「刪除重複值」-取消全選-選擇「內容頁鏈接」項)。
由於我選擇的數據是整個杭州市的「數據分析師」的招聘信息,用於判斷所屬「工作地點」將以「區」為依據展開,在查看數據的時候發現部分數據是以為城市為單位,這裡需要對缺失值根據具體情況做出相應處理。
首先將「工作地點」整列複製到最後一列中進行「分列」操作(「分列」操作會把分出的數據列直接覆蓋到後一列,建議複製到最後列操作最為可靠)
通過「刷選」功能去除非杭州城市。註:由於後續其他地方依然會使用到「刷選」功能,所有需要將怎個工作表複製到新工作表中用於保存刷選後的結果。
當我執行複製整個表格到新的工作表中的時候,發現 Excel 直接卡死,並提示內存不足,多次嘗試後我發現原因是 Excel 工作表中有大量的隱藏列和行,或是使用「篩選」使大量的欄位被隱藏後,在使用「全選」欄位的時候再把大量的空白單元格也複製了(全選的時候連續按兩次 ctrl+a),這樣的情況就會出現上述問題,解決方案是只選擇有欄位的單元格即可,如下圖:
當我執行完上述操作後,查看到「詳細地區」中有多處缺失值,可做如下處理:
1、首先通過通過「篩選」功能判定有多少缺失值,如果數量少,且容易通過人工甄別判斷,可根據具體情況補全對應缺失值;
2、如果通過「篩選」後發現缺失值是錯誤收錄,例如:所屬地區不屬於杭州,被HR錯誤的標記為杭州,那就做刪除處理;
3、如果存在大量的缺失值,且欄位屬於未出錯欄位,是由於書寫習慣或是對區域的理解不一樣,比如這份數據集中可能HR對於該職位在所屬公司工作性質定義為全市範圍內的,這樣的情況就會出現只有工作地點杭州,沒有具體所屬區域了,這樣的情況我們可以整體套用上級標註,全體標註為「杭州」。
通過篩選空白值可以得出判斷結果,詳細地區缺失值多達1145處,通過「定位」功能對所有缺失值進行標記,補全欄位為杭州,並通過組合快捷鍵 ctrl+enter 將所有缺失值全部補全,如下圖:
在數據採集中經常會出現多個欄位被自動放在了一個單元格中的情況,比如此數據集中的「公司概況」,其中包含了三部分內容:「公司性質」、「公司大小」「所屬行業」,在這裡我們就要將其進行「分列」、一致化處理。
如上圖所示,在公司概況中公司性質、公司大小以及所屬行業之間是用「|」分割開的,我們可以用以作為「分列」的分割符號,但是首先需要通過整體替換功能去除空白值,如果是在「分列」之後再去除空白值會更加繁瑣,具體操作如下:
我們要了解杭州市數據分析師的薪資待遇情況就需要對薪資待遇進行拆分為「最低薪資」、「最高薪資」、「平均薪資」,需要運用到函數Left、Mid、Find、Len、Average;但是在此之前,我們通過「篩選」觀察可以看到個別「薪資待遇」HR填寫的方式不太一樣,例如:「XXX-XXX千/月」、「XXX-XXX萬/年」「XXX元/天」「XXX元/小時」以及空置未填寫,為了方便後續的一致化處理,首先做「分列」處理,把時間剝離。
通過「篩選」並刪除掉未填寫「薪資待遇」的無效數據,這裡參考了 ExcelHome 論壇版主的方法:
Excel 篩選後的表,批量刪除時時提示「無法在篩選過的區域或表中移動單元格。」-Excel基礎應用-ExcelHome技術論壇 -把其他單位的薪資待遇通過轉換為「XXX-XXX千」格式,如下圖:
通過「篩選」查詢發現有部分「薪資待遇」HR是按「年」書寫的,在此要通過公式換算為「月」,如下圖:
通過上述幾步操作以後,我已經成功的把之前五花八門的薪資書寫方式轉換成了統一的格式,其中嘗試過很多種方法,最重要的是要知道怎麼去搜索自己想了解的一些函數,通過函數來達到轉換的目的,在這次轉換中我發現其實公式可以嵌套起來一起用,這樣就不需要分很多列去分布書寫,上圖就是我通過組合嵌套公式直接換算的,可以看到公式非常長:
=CONCATENATE(ROUND((LEFT(J2,FIND("-",J2)-1)/12),2),"-",ROUND((MID(J2,FIND("-",J2)+1,LEN(J2)-FIND("-",J2))/12),2))
以下是需要運用到函數Left、Mid、Right、Find、Len、Average、Round、Concatenate;
FIND:返回一個字元串在另一個字元串中出現的起始位置(區分大小寫)
語法:
FIND(find_text,within_text,start_num)
?Find_text: 要查找的字元串。用雙引號(表示空串)可匹配 Within_text 中的第一個字元,不能使用通配符;
?Within_text: 要在其中進行搜索的字元串;
?Start_num: 起始搜索位置,Within_text 中第一個字元的位置為 1。如果忽略,Start_num = 1。
LEFT:從一個文本字元串的第一個字元開始返回指定個數的字元
語法:
LEFT(text,num_chars)
?Text: 要提取字元的字元串;
?Num_chars: 要 LEFT 提取的字元數;如果忽略,為 1。
MID:從文本字元串中指定的起始位置起返回指定長度的字元
語法:
MID(text,start_num,num_chars)
?Text: 準備從中提取字元串的文本字元串;
?Start_num: 準備提取的第一個字元的位置。Text 中第一個字元為 1;
?Num_chars: 指定所要提取的字元串長度。
RIGHT:從一個文本字元串的最後一個字元開始返回指定個數的字元
語法
RIGHT(text,num_chars)
?Text: 要提取字元的字元串;
?Num_chars: 要提取的字元數;如果忽略,為 1。
AVERAGE:返回其參數的算術平均值;參數可以是數值或包含數值的名稱、數組或引用
語法:
AVERAGE(number1,number2,...)
?Number1: 必須。要計算平均值的第一個數字、單元格引用或單元格區域;
?Number2,...: 可選。要計算平均值的其他數字、單元格引用或單元格區域,最多可包含255個。
COUNT:計算區域中包含數字的單元格的個數
語法:
COUNT(value1,value2,...)
?Value1: value1,value2,...是1到255個參數,可以包含或引用各種不同類型的數據,但只對數字型數據進行計算。
ROUND:按指定的位數對數值進行四捨五入
語法:
ROUND(number,num_digits)
?Number1: 需要四捨五入的數值;
?Num_digits: 執行四捨五入時採用的位數。如果此參數為負數,則圓整到小數點的左邊;如果此參數為零,則圓整到最接近的整數。
CONCATENATE:將多個文本字元串合併成一個
語法:
CONCATENATE(text1,text2,...)
?Text1: text1,test2,... 是1到255個要合併的文本字元串。可以是字元串、數字或對單個單元格的引用。
當完成了上去轉換單位和時間等不同條件後將「薪資待遇」拆分成「最低薪水」、「最高薪水」、「平均薪水」就顯得異常簡單了,只是要注意當在求得「最低、最高薪水」以後求「平均薪水」之時需要先將文本格式的數字(求得的最低最高薪水的數值)轉換為數值,可通過複製單元格並使用「分列」來轉換,不然會提示被「被零除」錯誤。
繼續一致化處理數據,我們將對職位名稱進行篩選,剔除那些與「數據分析師」無關的職位,FIND 函數如果查詢的欄位中不包含所查詢的文本所報錯,例如:=FIND({"數據分析","數據運營","分析師"},R5) ,返回的值是#VALUE!,使用 COUNT 函數後會變成含有被查詢文本返回數值1,不包含返回數值0,加上 IF 函數判斷,可以設置為返回「是」或「否」,例:=IF(COUNT(FIND({"數據分析","數據運營","分析師"},R2),R2),"是","否")
通過「篩選」工具把與數據分析無關的職業都隱藏以後,以「以最低薪水」為錨點排序收入情況,得到以下初步數據:最高平均薪水為41.665K/月,有效職位424個。
複製整張表格到新的工作表中用於數據「描述統計」得到以下數據
整個杭州總體薪資情況(平均K/月,例:濱江1年工作經驗平均薪資7946.00元),註:表中直接顯示杭州的區域是HR在發布招聘信息時為明確標註工作地所在區域,特用「杭州」代替,以下圖看無經驗的顯示比1年工作經驗的平均薪資要高應該是大量HR沒有填寫對應屬性所致。
按百分比劃分
從上去分析結果可以得出:
1、濱江區、西湖區、江干區發布的招聘信息相對比較多,大量的人才需求集中在3-7年工作經驗;
2、整個杭州市數據分析師的薪資平時在9.5K左右,中位數在7.5,相比互聯網其他崗位不算很出眾,但是發展潛力巨大,隨著工作年限的增加,薪資漲幅也還不錯;
3、將來從事數據分析相關工作可以考慮選擇其它城市發展,比如北上廣等超一線城市。
推薦閱讀:
※俞飛鴻:成長就是有選擇權
※請對身邊愛裝的人,好點... ...
※你以為你很辛苦,其實你是在逃避責任
※為什麼越會獨處的人越優秀
※年輕人千萬不要碰的有哪些東西
TAG:自我成長 |