數據分析師的80%時間都在清洗數據?到底怎麼洗?

2021-01-09 網易

  

  做完數據採集就可以直接進行分析了嗎?肯定不是的。

  就拿做飯打個比方吧,對於很多人來說,熱油下鍋、掌勺翻炒一定是做飯中最過癮的環節,但實際上炒菜這個過程只佔做飯時間的20%,剩下80%的時間都是在做準備,比如買菜、擇菜、洗菜等等。

  在數據分析中,數據清洗就是這樣的前期準備工作。對於數據分析師來說,我們會遇到各種各樣的數據,在分析前,要投入大量的時間和精力把數據「整理裁剪」成自己想要或需要的樣子。

  為什麼呢?因為我們採集到的數據往往有很多問題。

  我們先看一個例子,假設老闆給你以下的數據,讓你做數據分析,你看到這個數據後有什麼感覺呢?

  

  你剛看到這些數據可能會比較懵,因為這些數據缺少標註。

  我們在收集整理數據的時候,一定要對數據做標註,數據表頭很重要。比如這份數據表,就缺少列名的標註,這樣一來我們就不知道每列數據所代表的含義,無法從業務中理解這些數值的作用,以及這些數值是否正確。但在實際工作中,也可能像這個案例一樣,數據是缺少標註的。

  我簡單解釋下這些數據代表的含義。這是一家服裝店統計的會員數據。最上面的一行是列坐標,最左側一列是行坐標。列坐標中,第0列代表的是序號,第1列代表的會員的姓名,第2列代表年齡,第3列代表體重,第4~6列代表男性會員的三圍尺寸,第7~9列代表女性會員的三圍尺寸。

  了解含義以後,我們再看下中間部分具體的數據,你可能會想,這些數據怎麼這麼「髒亂差」啊,有很多值是空的(NaN),還有空行的情況。

  是的,這還僅僅是一家商店的部分會員數據,我們一眼看過去就能發現一些問題。日常工作中的數據業務會複雜很多,通常我們要統計更多的數據維度,比如100個指標,數據量通常都是超過TB、EB級別的,所以整個數據分析的處理難度是呈指數級增加的。這個時候,僅僅通過肉眼就很難找到問題所在了。

  我舉了這樣一個簡單的例子,帶你理解在數據分析之前為什麼要有數據清洗這個重要的準備工作。有經驗的數據分析師都知道,好的數據分析師必定是一名數據清洗高手,要知道在整個數據分析過程中,不論是在時間還是功夫上,數據清洗大概都佔到了 80%

  數據質量的準則

  在上面這個服裝店會員數據的案例中,一看到這些數據,你肯定能發現幾個問題。你是不是想知道,有沒有一些準則來規範這些數據的質量呢?

  準則肯定是有的。不過如果數據存在七八種甚至更多的問題,我們很難將這些規則都記住。有研究說一個人的短期記憶,最多可以記住7條內容或信息,超過7條就記不住了。而數據清洗要解決的問題,遠不止7條,我們萬一漏掉一項該怎麼辦呢?有沒有一種方法,我們既可以很方便地記住,又能保證我們的數據得到很好的清洗,提升數據質量呢?

  在這裡,我將數據清洗規則總結為以下4個關鍵點,統一起來叫「完全合一」,下面我來解釋下:

   完整性:單條數據是否存在空值,統計的欄位是否完善;

   全面性:觀察某一列的全部數值,比如在Excel表中,我們選中一列,可以看到該列的平均值、最大值、最小值。我們可以通過常識來判斷該列是否有問題,比如:數據定義、單位標識、數值本身;

   合法性:數據的類型、內容、大小的合法性。比如數據中存在非ASCII字符,性別存在了未知,年齡超過了 200歲等;

   唯一性:數據是否存在重複記錄,因為數據通常來自不同渠道的匯總,重複的情況是常見的。行數據、列數據都需要是唯一的,比如一個人不能重複記錄多次,且一個人的體重也不能在列指標中重複記錄多次;

  按照以上的原則,我們能解決數據清理中遇到的大部分問題,使得數據標準、乾淨、連續,為後續數據統計、數據分析做好準備。如果想要進一步優化數據質量,還需要在實際案例中靈活使用。

  清洗數據

  了解了數據質量準則之後,我們針對上面服裝店會員數據案例中的問題進行一一擊破。

  這裡你就需要Python的Pandas工具了。它是基於NumPy的工具,專門為解決數據分析任務而創建。Pandas納入了大量庫,我們可以利用這些庫高效地進行數據清理工作。

  這裡我補充說明一下,如果你對Python還不是很熟悉,但是很想從事數據挖掘、數據分析相關的工作,那麼花一些時間和精力來學習一下Python是很有必要的。Python擁有豐富的庫,堪稱數據挖掘利器。當然了,數據清洗的工具也還有很多,這裡我們只是以Pandas為例,幫你應用數據清洗準則,帶你更加直觀地了解數據清洗到底是怎麼回事兒。

  下面,我們就依照「完全合一」的準則,使用Pandas來進行清洗。

  完整性

  

  在數據中有些年齡、體重數值是缺失的,這往往是因為數據量較大,在過程中,有些數值沒有採集到。通常我我們可以採用以下三種方法:

  刪除:刪除數據缺失的記錄

  均值:使用當前列的均值

  高頻:使用當前列出現頻率最高的數據

  比如我們想對 df[『Age』]中缺失的數值用平均年齡進行填充,可以這樣寫:

  df['Age'].fillna(df['Age'].mean(), inplace=True)

  如果我們用最高頻的數據進行填充,可以先通過value_counts獲取Age欄位最高頻次age_maxf,然後再對 Age 欄位中缺失的數據用age_maxf進行填充:

  age_maxf=train_features['Age'].value_counts().index[0]

  train_features['Age'].fillna(age_maxf,inplace=True)

  

  我們發現數據中有一個空行,除了index之外,全部的值都是NaN。Pandas的read_csv()並沒有可選參數來忽略空行,這樣,我們就需要在數據被讀入之後再使用dropna()進行處理,刪除空行。

  # 刪除全空的行

  df.dropna(how='all',inplace=True)

  全面性

  

  觀察weight列的數值,我們能發現weight列的單位不統一。有的單位是千克(kgs),有的單位是磅(lbs)。

  這裡我使用千克作為統一的度量單位,將磅(lbs)轉化為千克(kgs):

  # 獲取 weight 數據列中單位為 lbs 的數據

  rows_with_lbs = df['weight'].str.contains('lbs').fillna(False)

  print df[rows_with_lbs]

  # 將 lbs轉換為 kgs, 2.2lbs=1kgs

  for i,lbs_row in df[rows_with_lbs].iterrows():

   # 截取從頭開始到倒數第三個字符之前,即去掉lbs。

   weight = int(float(lbs_row['weight'][:-3])/2.2)

   df.at[i,'weight'] = '{}kgs'.format(weight)

  合理性

  

  我們可以看到在數據集中Firstname和Lastname有一些非ASCII的字符。我們可以採用刪除或者替換的方式來解決非ASCII問題,這裡我們使用刪除方法:

  # 刪除非 ASCII 字符

  df['first_name'].replace({r'[^\x00-\x7F]+':''}, regex=True, inplace=True)

  df['last_name'].replace({r'[^\x00-\x7F]+':''}, regex=True, inplace=True)

  唯一性

  

  在數據中不難發現,姓名列(Name)包含了兩個參數Firstname和Lastname。為了達到數據整潔目的,我們將Name列拆分成Firstname和Lastname兩個欄位。我們使用Python的split方法,str.split(expand=True),將列表拆成新的列,再將原來的Name列刪除。

  # 切分名字,刪除源數據列

  df[['first_name','last_name']] = df['name'].str.split(expand=True)

  df.drop('name', axis=1, inplace=True)

  

  我們校驗一下數據中是否存在重複記錄。如果存在重複記錄,就使用Pandas提供的drop_duplicates()來刪除重複數據。

  # 刪除重複數據行

  df.drop_duplicates(['first_name','last_name'],inplace=True)

  這樣,我們就將上面案例中的會員數據進行了清理,來看看清理之後的數據結果。怎麼樣?是不是又乾淨又標準?

  

  養成數據審核的習慣

  現在,你是不是能感受到數據問題不是小事,上面這個簡單的例子裡都有 6 處錯誤。所以我們常說,現實世界的數據是「骯髒的」,需要清洗。

  第三方的數據要清洗,自有產品的數據,也需要數據清洗。可以說沒有高質量的數據,就沒有高質量的數據分析,而數據清洗是高質量數據的一道保障。

  當你從事這方面工作的時候,你會發現養成數據審核的習慣非常重要。而且越是優秀的數據分析人員,越會有「數據審核」的「職業病」。這就好比編輯非常在意文章中的錯別字、語法一樣。

  數據的規範性,就像是你的作品一樣,通過清洗之後,會變得非常乾淨、標準。當然了,這也是一門需要不斷修煉的功夫。終有一天,你會進入這樣一種境界:看一眼數據,差不多7秒鐘的時間,就能知道這個數據是否存在問題。為了這一眼的功力,我們要做很多練習。

  剛開始接觸數據分析工作的時候,一定會覺得數據分析是件很酷、很有價值的事。確實如此,不過今天我還要告訴你,再酷炫的事也離不開基礎性的工作,就像我們今天講的數據清洗工作。對於這些基礎性的工作,我們需要耐下性子,一個坑一個坑地去解決。

  了解IT相關內容——各平臺同名「職坐標在線」

特別聲明:以上內容(如有圖片或視頻亦包括在內)為自媒體平臺「網易號」用戶上傳並發布,本平臺僅提供信息存儲服務。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相關焦點

  • 2020年怎麼能成為數據分析師,你想了解的都在這裡
    01數據分析師是幹什麼的 數據分析師一般是在網上搜集數據,將搜集來的數據進行清洗整理,然後進行分析,分析出數據裡的新的業務和商業,最後通過可視化的形式呈現給企業高管,幫助企業高管做決策,是這樣一個角色。
  • 如何成為一名數據分析師?
    這是一個用數據說話的時代,也是一個依靠數據競爭的時代。目前世界500強企業中,有90%以上都建立了數據分析部門。IBM、微軟、Google等知名公司都積極投資數據業務,建立數據部門,培養數據分析團隊。各國政府和越來越多的企業意識到數據和信息已經成為企業的智力資產和資源,數據的分析和處理能力正在成為日益倚重的技術手段。
  • 挫折中成長——數據分析師面經
    、「某大廠放出的這個崗位好心動啊」…… 在這個蠢蠢欲動的時候,一個從業 2400 天的分析師小前輩,來給大家介紹一下數據分析師崗位的面(cuo)試(zhe)經(gu)驗(shi)。
  • 數據分析師的發展方向有哪幾方面?
    數據分析行業大火,很多小夥伴都想轉行成為數據分析師,入行容易,但重要的需要確定未來的一個發展方向,不能盲目入行。下面小編給大家分享幾種數據分析師的發展方向,大家可以參考一下,首先確定好自己的目標。業務數據分析師:技能上需要會使用Excel、pythonl和SQL,因為業務數據分析師主要工作是把數據和業務結合的,用數據輔助業務增長,對於技術方面的要求一般,業務知識才是重點。
  • 一個成功的數據分析師的職業生涯
    數據分析師做什麼?數據分析員收集,處理和執行數據的統計分析,即使數據以某種方式或其他方式有用。它們幫助其他人做出正確的決策,並優先處理已收集的原始數據,以便使用某些公式和應用正確的算法使工作更輕鬆。如果你對數字,代數函數充滿熱情,並喜歡與其他人分享你的工作,那麼你將成為數據分析師。
  • 零基礎入門數據分析師——你可以做到!
    如果您計劃成為一名數據分析師,目標是提升數據獲取、數據分析、數據可視化的水平。但是網上資料一大堆,完全零基礎的你從哪開始學習?視頻下載了很多,無法堅持學習? 經常遇到問題,卻得不到及時解決,浪費大量寶貴時間。CDA數據分析研究院的老師指導您零基礎入門數據分析,以下將針對零基礎學員介紹數據分析的流程。
  • 怎樣從數據分析師轉型數據科學家?
    數據分析師的首要作業是對數據進行搜集和處理,並通過統計算法分析已處理的結構化數據,從而為數據賦能,改進決策。數據科學家也會進行相似的作業,但對其提出了更高的要求。那麼,怎樣從數據分析師轉型數據科學家呢?
  • 數據分析師入坑指南
    從2015年回國加入百度,我已經在分析師這個行業工作了5年,也算是個milestone了。恰逢最近總有親戚家小孩請教畢業後怎麼找一份數據分析師的工作,而我在分析師的招聘方面也有一定的經驗,所以今天就來寫一寫我的想法。專業要求幾乎沒有要求,我曾經問過周圍的數據分析師, 大家的專業還是挺具有差異化的。
  • 數據科學家和數據分析師的區別在哪兒?
    數據科學家和數據分析師的區別在哪兒?數據科學家和數據分析師在所用程式語言、平臺/工具,以及所解決的問題方面都有共同之處。二、數據分析師的主要職責  數據分析師主要職能:與相關部門定義要解決的業務問題;獲取數據(使用SQL);探索性的數據分析、趨勢分析和可視化(使用Excel和Tableau)——根據工作場景,向有關部門展示從數據中獲得的發現,並提供可行性的建議。  數據分析師與業務分析師、商業情報分析師,甚至Tableau開發人員有著相似的頭銜。
  • 零基礎轉行數據分析師是怎樣的體驗?
    這篇文章是根據將之前自己的知乎問答結合自己入職後的體驗進行修改分享給大家,如果有意轉行做數據分析師的進攻參考。這裡的數據分析師定位於偏業務的數據分析師,不談高大上算法和數倉之類的數據分析師。講這個之前還是要潑潑冷水,現在數據分析師的崗位被一些培訓機構炒的太熱,導致很多人被忽悠進這個行業。
  • 大數據時代,數據分析師的報考條件是什麼?
    大數據(big data),指無法在一定時間範圍內用常規軟體工具進行捕捉、管理和處理的數據集合,是需要新處理模式才能具有更強的決策力、洞察發現力和流程優化能力的海量、高增長率和多樣化的信息資產。數據無處不在。在網絡上、在報紙上、書籍上。在家用電腦的磁碟上,在我們的腦海裡,數據大量且廣泛的存在。
  • 一名數據分析師的「實戰解碼」
    中部戰區空軍雷達某旅數據分析師劉志成(右一)指導戰勤參謀完成作戰課題研究。每天,空情量數以千計,每個空情信息數據又有著千差萬別;即便是同一批目標,每名操縱員的經驗和感覺都不一樣,每部雷達顯示的數據也不一樣;就算同一部裝備,在不同地域、不同時間顯示的數據也不一樣……明知山有虎,偏向虎山行。劉志成決定把全旅所有雷達裝備、每一名操縱員處理每一次空情的數據都記錄下來。第一次提出這個想法時,劉志成自己心裡也沒底。
  • 博睿同創|數據分析師需要考證嗎?
    # 一、需求是最好的引導 當我們在各大招聘網站搜索數據分析相關職位的時候,可以看到一般要求是運用大數據分析工具解決業務問題,以及所需要具備的數據分析相關的技能以及各大企業侃侃而談的邏輯思維、表達能力等等,似乎都沒有要有數據分析師證書這項要求
  • 從零開始數據分析:一個數據分析師的數據分析流程 | 網際網路數據...
    識別信息需求識別信息需求是確保數據分析過程有效性的首要條件,可以為收集數據、分析數據提供清晰的目標。2.數據採集了解數據採集的意義在於真正了解數據的原始面貌,包括數據產生的時間、條件、格式、內容、長度、限制條件等。
  • 從零開始數據分析:一個數據分析師的數據分析流程
    識別信息需求識別信息需求是確保數據分析過程有效性的首要條件,可以為收集數據、分析數據提供清晰的目標。2.數據採集了解數據採集的意義在於真正了解數據的原始面貌,包括數據產生的時間、條件、格式、內容、長度、限制條件等。
  • 第十二屆CDA數據分析師考試火熱報名中
    5月8日,CDA數據分析師認證考試中心正式發文通知:為做好疫情常態化防控,CDA第12屆考試將延期一個月進行。原定於6月底的第十二屆CDA數據分析師考試時間調整為7月25-26日兩天,請相關考生做好安排。此次延期為廣大考生爭取了更多的備考時間,也讓一些原本複習時間不充足的考生趕上了末班車。
  • 明知故問 | 2020熱門職業——數據分析師前景如何?
    但萬變不離其宗,所有數據分析師的最主要職能都是針對問題或需求,去獲取、清洗、分析數據,並呈現數據分析結果,輔助企業做出判斷或決策。再者,是數據科學家,某種程度而言,這是數據分析師的進階版。與數據分析師不同是:其一,他們精通優化。
  • 第十二屆CDA數據分析師考試即將開始
    CDA(Certified Data Analyst)亦稱「CDA數據分析師」, 專指在網際網路、金融、電信、醫藥、旅遊及其他傳統行業中專門從事數據的採集、清洗、處理、分析並能製作業務報告、提供決策的新型數據分析人才。13年至今,通過CDA認證考試的持證者已遍布在世界範圍各行各業,包括世界500強企業、 頂尖科技獨角獸、大型金融機構、國企事業單位、國家行政機關等等。
  • CDA數據分析師認證證書含金量不斷提高,成數據分析入門新剛需!
    2013-2017年排名前五職位增長率 圖片來源:領英中國2019年《新興職業報告》在網際網路、金融、諮詢、電信、零售、醫療、旅遊等行業,迫切需要專門從事數據採集、清洗、處理、分析並能製作業務報告、提供決策的新型數據分析人才。
  • 數據分析師必讀的養成書單!
    想必大家一定覺得工作已經很忙了,回家只想玩玩手機好好休息一下,哪有時間看書呢?但是當你的潛意識和頭腦都能真心覺得讀書這件事太好了,而且執行起來並沒有想像中那麼難,時間自然就會來到你的面前。《魔鬼數學》作為一名數據分析師一定要對數字很敏感。這本書中世界知名數學家喬丹艾倫伯格告訴我們數學與我們所做的每一件事都息息相關,可以幫助我們洞悉在混沌和嘈雜的表象之下日常生活的隱形結構和秩序。