天天看點

《資料整理實踐指南》一2.2 校驗

本節書摘來自異步社群《資料整理實踐指南》一書中的第2章,第2.2節,作者【美】q. ethan mccallum(麥卡倫),更多章節内容可以通路雲栖社群“異步社群”公衆号檢視

一旦資料格式已經可讀且可操作,下一步是要弄清楚資料的含義。在某些情況(遺憾的是,這種情況非常罕見)下,提供了關于資料的所有資訊。通過需要對資料做一些探索。有些資料第一行可能會提供一些資訊,有些資料可能每個字段都有一個鍵值,這些取決于資料的格式。幸運的話,這些資料可能稍有些備援資訊,你可以了解,或者至少你認識的一些人可以了解。關于這方面,我常常求助于一位俄羅斯藉qa。這是工作場所多樣化的另一個優勢。

一個常見的錯誤是誤解字段的機關或含義。貨币字段的機關可以是美元、美分甚至是0.000001元(如google的adsense api計量機關)。收入字段可能是毛收入,也可能是淨收入。距離可以使英裡、千米、米等。檢視字段的定義和實際值可以避免因誤解而得到錯誤的結論。

你還可以檢視一些其他字段,確定它們在上下文中是有意義的。舉個例子,字段pageview往往是個整數,而不會是小數或字元串。貨币字段(價格、成本、ppc、rpm)往往是小數,通常小數點後有兩位到四位。useragent字段包含的字元串應該看起來和常見的使用者代理類似。ip位址應該是整數或以點号分隔的字元串。

資料集中的常見問題是缺失值或空值,這有時候不會出什麼問題,有時會導緻記錄不準确。這些值可以通過很多方式來表示。我經常看到它們被表示為空(比如,若使用t 分隔,則出現連續tt這種形式)、空串(單引号或雙引号)、字元串null或未定義或n/a或nan,還有以數值0表示。不管在你的資料集中是如何表示,要知道用什麼表示缺失值或空值,并确定資料中确實是按此方式表示的,這樣可以避免後期使用資料帶來很多麻煩。

我經常把這些正常檢查延伸到字段的真實校驗。絕大多數的校驗方式可以通過正規表達式實作。由于曆史原因(我用了20多年),我通常用perl寫校驗腳本,但是還有很多更好的選項。幾乎每一門語言都實作了正規表達式。

對于枚舉字段,所有值是否都落在正确的區間?舉個例子,“month”字段隻應該包含月份資訊(從1~12的整數,字元串值隻能是jan、feb…或者january、february…)。

對于數值字段,所有值都是數值嗎?下面這段代碼檢查字段是否指包含數字。

對于固定格式的字段,是否所有值都和正規表達式比對?舉個例子,ip位址通常是以點分隔的(比如127.0.0.1),可以通過這樣的正規表達式比對^d+.d+.d+.d+$(或者更嚴格的比對)。

對于數值字段,我想做些簡單的統計檢查。最小值在字段的上下文中是否有含義?計數器的最小值(點選數、網頁浏覽數pv等)的值應該是大于等于0的值,很多其他字段也是如此(比如ppc、ctr、cpm)。同樣,最大值是否有意義?極少數字段在邏輯上值可以是10億,在很多情況下,如果實際值遠小于該值則沒有意義。

根據實際的定義,類似于ctr的比率值應該小于1。當然,不管定義是什麼,其值經常會超過1(畢竟本書探讨的是噪音資料),但是其值也不應該比1大太多。如果你看到ctr值是幾百或幾千,很可能有問題。

财務相關的字段值應該有一個合理的上限值。至少對于我所處理的資料,ppc或cpc字段值在數百美元可能還是有意義的,但如果是幾千或更大值,就肯定不合理了。你可以接受的範圍很可能不同,但不管資料值是多少,都應該檢查資料,確定是合理的。

你還可以檢視一個字段的平均值(如類似取模或中位數的簡單統計),確定它看起來是合理的。舉個例子,如果一個裝飾物的售價在10美元左右,而在“裝飾物”字段是999美元,那很可能是哪裡出了差錯。它也可以幫助校驗數值的機關是否正确。如果該字段值的機關是美分,而不是美元,那值999就很合理了。

關于這些校驗,幸運的是可以很容易通過自動化實作,這對于頻繁更新的資料集,就非常便利。花上數個小時的時間檢視新的資料集其實挺有意思,因為通過這個過程可以對資料有一些初步了解,但是多次做重複的事情就很讓人煩了。如果你有一個小時的時間,可能甯可作為迪士尼的叢林巡航導遊(“這真是太有趣了,再來一次吧!再來一次吧……”)。

繼續閱讀