前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >数据清洗要了命?这有一份手把手Python攻略

数据清洗要了命?这有一份手把手Python攻略

作者头像
大数据文摘
发布2018-05-25 14:57:13
1.5K0
发布2018-05-25 14:57:13
举报
文章被收录于专栏:大数据文摘

大数据文摘作品,转载要求见文末

作者 | 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”)

看完本文作者的分享是不是心痒难耐,也想自己上练练手啊?或者,你那里有更好的建议想分享给大家?大数据文摘刚刚爬下了5万条职位数据来辅助我们《数据团队建设报告》的分享,想要练手清洗、加入这个大工程的同学请点击文末阅读原文填写表单加入我们的数据清洗团队,和志同道合的cleaner们一起玩儿起来!

原文链接:https://medium.com/towards-data-science/data-cleaning-web-scraped-job-data-6c2a2d963cd

关于转载 如需转载,请在开篇显著位置注明作者和出处(转自:大数据文摘 | bigdatadigest),并在文章结尾放置大数据文摘醒目二维码。无原创标识文章请按照转载要求编辑,可直接转载,转载后请将转载链接发送给我们;有原创标识文章,请发送【文章名称-待授权公众号名称及ID】给我们申请白名单授权。未经许可的转载以及改编者,我们将依法追究其法律责任。联系邮箱:zz@bigdatadigest.cn。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2017-06-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 大数据文摘 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
NLP 服务
NLP 服务(Natural Language Process,NLP)深度整合了腾讯内部的 NLP 技术,提供多项智能文本处理和文本生成能力,包括词法分析、相似词召回、词相似度、句子相似度、文本润色、句子纠错、文本补全、句子生成等。满足各行业的文本智能需求。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档