標籤:

數據清洗要了命?這有一份手把手Python攻略

大數據文摘公眾號首發(ID:BigDataDigest),轉載請註明來源

作者 | Michael Salmon

編譯 | 穎子,江凡

幾個月前,我從網站indeed.com上抓取了招聘信息相關數據。相信很多同學都跟我做過同樣的事情,想要收集不同城市的各種職位信息,然後建立一個模型來預測它們的相對薪水。

然而在建立模型之前,我需要對抓取的信息進行初步的分析和清洗。本文將簡要介紹我在清洗數據過程中使用的一些技巧。

在這個任務中,我使用了python和配套的庫,包括pandas和numpy。

之前我已經成功地從美國不同的城市中抓取並保存了大量的招聘信息,並將其導入到pandas數據框架中,如下圖所示(你會發現絕大多數職位不包括工資信息):

為了完成清洗數據的任務,我有如下目標:

  • 從數據中刪除所有重複的招聘信息

  • 格式化所有可用的薪資數據,以便只顯示預期年薪這一數據。

  • 在構建預測模型時,對字元串進行各種初步清洗以使之後的自然語言處理過程更容易。

刪除重複的招聘信息

最開始,我從保存的csv文件中讀取數據,並檢查格式。之後,我刪除了所有重複行,並評估在抓取過程中我收集了多少不重複的內容。

僅在這個過程中,我的數據結構從128,289行減少到6,399行。雖然編程並不是很複雜,但我只想在之後的分析中使用不重複的招聘信息。

格式化薪資數據

為了準備計算薪酬的數據,我首先查看了一下正在處理的數值的數據類型:

scrape_data[「salary」].value_counts()

可以看出,這一數據的某些內容會使之後的計算變得複雜。Python在進行數學計算時並不知道如何處理像逗號和美元符號這樣的字元,因此我們需要在進行下一步之前去除這些符號和「n」字元。

除此之外,你還會注意到,薪水可以用單一數字或範圍表示,而且會以不同的支付方式呈現——年薪,月薪,或時薪。在準備這些薪酬數據,以便進一步分析時,我需要將上述內容全部考慮進去。

一開始,我去除了那些無關的字元:

雖然在使用這些數據前,我知道我需要從薪資數據中刪除這些支付方式不同的字元串(如,「一年」、「一月」),但是我想要保留這些原始支付方式以供將來使用。因此,我創建了一個新的數據列來捕捉這些數據。我將這列命名為「og_salary_period」:

然後我將所有含有薪資信息的崗位數據放在一個單獨的數據結構中,這樣我就可以相應地擴展這些數據。注意,我從原始的scale_data表中完全移除了帶有薪資數據的行。當我將這些數據進行有效地規範後,我會將其重新添加回去。

下圖是薪資數據結構的截圖。你會注意到og_salary_period這一列捕獲了原始薪資信息。

至此,我根據原始薪資數據的支付方式將職位信息和薪資信息分開。我也刪除了與薪資支付方式有關的字元串。

之後,我定義了一個函數用來檢測在一定範圍內的薪資信息(通過在數據中查找連字元),並返回兩個值的均值。如果沒有連字元,它將以浮點數的形式返回單個值。

通過這個函數,我可以清洗薪資數據,並將任何未以年薪支付的薪資內容轉換為大概的年收入。

(雖然是否保留按時薪和周薪支付的招聘信息還有待討論,我決定保留是希望能有更多的可用數據,同時我認為這類支付方式也能與工作所能提供的真實薪金相近。)

最後,我將各種薪資數據結構加在一起,並重新放進原始的scrape_data中。雖然我用了兩步做這件事,但可以將其整合成一步:

好了!薪資數據準備好了!

額外的數據清洗

在我準備好建模之前,我想完成更多的清洗任務,準備自然語言處理用的數據。

在去除所有數據中的特殊字元之前,我意識到在數據中有一些「r&d」(研究與開發)實例。為了避免僅簡單地剝離「&」符號而剩下「r」和「d」兩個單獨的字元,我希望在進一步刪除特殊字元前,有針對性的更改這個特定字元串:

接下來,我定義了一個函數去掃描一列,並去除了特殊字元表中的所有字元。之後我在每一列中都應用了這一函數,除了「salary」(浮點數據列)和「og_salary_period」(我專門創建此列不包含任何字元)這兩列。

最後,我稍微清理了一下位置信息。我注意到某些包含位置信息的招聘內容僅僅提到了「在美國」。由於這種信息沒有任何作用,所以在這種情況下,我將這些值同我抓取到的城市名稱一同輸入。

另外,為了簡化位置數據,我僅保留了每份招聘信息的州名和城市名。這意味著要拆分郵政編碼的位置信息。我意識到在這一過程中我會失去一部分信息,但我覺得這會使檢查各組位置更為容易,同一地方只使用唯一的表述不會對自然語言處理分析造成太大的影響。

就是這樣!最後一步是將數據保存為已清洗好的csv文件,以便更容易地載入和建模。

scrape_data.to_csv(「scraped_clean.csv」)

搜索微信公眾號[大數據文摘](ID:bigdatadigest)

普及數據思維 傳播數據文化


推薦閱讀:

TAG:Python | 大数据 |