機器學習-數據清洗
歡迎大家前往騰訊雲+社區,獲取更多騰訊海量技術實踐幹貨哦~
本文由brzhang發表
數據清洗
首先,為何需要對數據進行清洗
數據清洗的工作絕壁是非常枯燥的,做數據研究的的人絕對無法避開這個環節,其根本原因是因為我們從各種渠道拿到的數據可能會出現:
1、不合理的數據,你比如,樣本中有些人的年齡超過了120歲,樓層的高度達到了1000層,以及其他的一些非常不合理的場景。
2、錯誤的類型,你比如,樣例中,幾乎所有的數據都是整形,然而,有一些是字符串類型,如果不進行處理,將這些數據直接餵給算法,一般情況下是要崩潰的。
3、計算機對於處理字符串類型比較吃力,有時候,需要我們將他轉化為數字類型,這樣就設計到一個映射關系,比如,樣例性別,【男,女】,我們可以轉化為1,2,房屋的類型【單間,一房一廳,二房一廳,三房一廳,商鋪】可以對應的枚舉出來,比如我在處理房屋朝向上的示例
#提取房屋的朝向 def parse_orientation(row): if ‘朝西南‘ in row: return 1 elif ‘朝東北‘ in row: return 2 elif ‘朝東‘ in row: return 3 elif ‘朝南‘ in row: return 4 elif ‘朝西北‘ in row: return 5 elif ‘朝北‘ in row: return 6 elif ‘朝東南‘ in row: return 7 elif ‘朝南北‘ in row: return 8 elif ‘朝西‘ in row: return 9 else: return 10
等等等等,我想說的是絕對還有很多你意想不到的場景,需要你耐心的打磨數據,將搜集到的原始數據,清洗成為可用的數據。
數據清洗需要掌握哪些黑科技
通常我們拿到的數據數據都可以簡化為表格模型,無用你是xsl也好,csv亦或json數組也好,都可以利用pandas來讀取,讀取之後,接下來的工作基本上就是借助在pandas的一些api來做數據清洗工作了,如下,我讀取了一份房價信息的數據表,這份數據當然是我自己根據上一篇文章,利用scrapy做了一個爬蟲爬取的咯。
jupyter筆記
為了讓我們能夠更好的玩數據清洗,我也不吝嗇的貢獻出了一份非常全面的pandas的操作Cheatsheet一份,以及後面你一定會用到一個萬能的CheatSheet。
來來,簡單的了解一下pandas的一些常用的api了,舉例就用:
示例數據一行
1、取子集常用操作
取子集
其中,loc是支持按照列名字符串的方式來取子集,iloc支持的是使用數組索引(從0開始)的方式來取子集,通常,逗號前面是行相關的一些條件限制,逗號右邊則是列相關的限制。比如,我取得
我就取前兩列
2、處理空白數據行
處理空白數據
這種就很簡單愉快了,一個api就可以刪除或者填充有空白數據的樣本了。
這個就不演示了,因為我是爬蟲爬取數據,所以在爬取的過程中,我已經對數據進行了一些基礎的處理,程序控制不可能出現空白數據了,所以,我也是建議,自己寫爬蟲去獲取數據,這些減輕數據清洗環節的壓力。
3、apply系列
apply其實有比較多兄弟,比如applymap,map,他們的能力各有不同,總的來說就是apply()是一種讓函數作用於列或者行操作,applymap()是一種讓函數作用於DataFrame每一個元素的操作,而map是一種讓函數作用於Series每一個元素的操作,如下所示,我這裏對ege列進行處理了一了,將數字和文本歸一化為數字。
apply示例
實際上,這個操作完全可用map來做:
df[‘ege‘] = df[‘ege‘].map(parse_house_age)
df.head(5)
結果完全一樣,因為我們只取了一列。
數據清洗比較高級的方式,使用各種圖表
1、使用散點圖
房屋總面積對應總價圖
2、房價熱力值圖:
房價區間熱力圖
圖描述了房間分布區間,可以清洗看出一些問題。
3、頻率直方圖幫助我們迅速找到一些特例獨行的豬,因為他出現的次數少嘛,不得不讓人懷疑這種數據的真實性。
利用直方圖快速找出毛刺點
ok,總的來說,這個過程需要開動自己的腦經,把你拿到的原始數據,慢慢慢慢的,變成可以給你下面算法需要的數據。
相關閱讀
【每日課程推薦】機器學習實戰!快速入門在線廣告業務及CTR相應知識
此文已由作者授權騰訊雲+社區發布,更多原文請點擊
搜索關註公眾號「雲加社區」,第一時間獲取技術幹貨,關註後回復1024 送你一份技術課程大禮包!
機器學習-數據清洗