数据分析师招聘数据清洗实战

  • 数据导入并查看
  • 重复数据处理
  • 异常值处理
  • 缺失值处理

数据是数据分析师的招聘薪资,主要内容是进行数据读取,数据概述,数据清洗和整理

数据获取:链接:https://pan.baidu.com/s/1sSmyiUfkDtVHuJEQP56h3w
提取码:okic

数据导入并查看

首先载入的数据在pandas中,常用的载入函数是read_csv。除此之外还有read_excel和read_table,table可以读取txt。若是服务器相关的部署,则还会用到read_sql,直接访问数据库,但它必须配合mysql相关包。

import pandas
df = pandas.read_csv('data/DataAnalyst.csv',encoding='gb2312')
#查看表数据
df.head(5)

查看表结构

df.info()

这里列举出了数据集拥有的各类字段,一共有6876个,公司id和职位id为数字,其他都是字符串。

重复数据处理

查看重复数据

print(len(df.positionId.unique()))

unique函数可以返回唯一值,数据集中positionId是职位ID,值唯一。原始值有6876,配合len函数计算出唯一值共有5031个,说明有多出来的重复值。

处理重复数据

df_duplicates=df.drop_duplicates(subset='positionId',keep='first')
df_duplicates.info()

drop_duplicates函数通过subset参数选择以哪个列为去重基准。keep参数则是保留方式,first是保留第一个,删除后余重复值,last还是删除前面,保留最后一个。duplicated函数功能类似,但它返回的是布尔值。

异常值处理

接下来加工salary薪资字段。目的是计算出薪资下限以及薪资上限。薪资内容没有特殊的规律,既有小写k,也有大小K。这里需要用到pandas中的apply。它可以针对DataFrame中的一行或者一行数据进行操作,允许使用自定义函数。

def cut_word(word):position = word.find ("-")bottomSalary = word[:position-1]return bottomSalary
df_duplicates.salary.apply(cut_word)

定义word_cut函数,它查找「-」符号所在的位置,并且截取薪资范围开头至K之间的数字,也就是想要的薪资上限。apply将word_cut函数应用在salary列的所有行。「k以上」这类脏数据怎么办呢?find函数会返回-1,如果按照原来的方式截取,是word[:-2],不是想要的结果,所以需要加一个if判断。

def cut_word(word):position = word.find ("-")if position != -1:bottomSalary = word[:position-1]else:bottomSalary = word[:word.upper().find("K")]return bottomSalary
df_duplicates["bottomSalary"] = df_duplicates.salary.apply(cut_word)

因为python大小写敏感,我们用upper函数将k都转换为K,然后以K作为截取。这里不建议用「以上」,因为有部分脏数据不包含这两字。

将bottomSalary转换为数字,如果转换成功,说明所有的薪资数字都成功截取了。

df_duplicates.bottomSalary.astype("int")

薪资上限topSalary的思路也相近,只是变成截取后半部分。

def cut_word(word,method):position = word.find ("-")if position != -1:bottomSalary = word[:position-1]topSalary = word[position+1:len(word)-1]else:bottomSalary = word[:word.upper().find("K")]topSalary = bottomSalaryif method == "bottom":return bottomSalaryelse:return topSalary
df_duplicates["topSalary"] = df_duplicates.salary.apply(cut_word,method = "top")

接下来求解平均薪资。

bottomSalary和topSalary数据类型转换为数字,并为数据集添加avgSalary列

df_duplicates.bottomSalary=df_duplicates.bottomSalary.astype("int")
df_duplicates.topSalary=df_duplicates.topSalary.astype("int")
df_duplicates['avgsalary'] = df_duplicates.apply(lambda x:(x.bottomSalary+x.topSalary)/2,axis=1)

数据类型转换为数字,这里引入新的知识点,匿名函数lamba。很多时候我们并不需要复杂地使用def定义函数,而用lamdba作为一次性函数。lambda x: ******* ,前面的lambda x:理解为输入,后面的星号区域则是针对输入的x进行运算。案例中,因为同时对top和bottom求平均值,所以需要加上x.bottomSalary和x.topSalary。word_cut的apply是针对Series,现在则是DataFrame。axis是apply中的参数,axis=1表示将函数用在行,axis=1则是列。这里的lambda可以用(df_duplicates.bottomSalary + df_duplicates.topSalary)/2替代。

缺失值处理

查看缺失数据存在的列

df_duplicates.isnull().any()

其中companyLabelList,businessZones,secondType,positionLables都存在为空的情况。由于这些字段的缺失值不能向前或者向后填充,单独填充的话数据量也很大,因此为了是数据更加精准,将有空值的行直接删除

df_duplicates.dropna(axis=0, how='any', inplace=True)

再次查看

df_duplicates.isnull().any()

到此,数据清洗的部分完成。切选出我们想要的内容

查看一下已经处理好的数据

df_duplicates.head(10)

pandas预处理案例——数据分析师招聘数据清洗实战相关推荐

  1. mysql数据生产数据分析_基于MySQL玩转SQL数据分析课程 互联网数据分析师-SQL数据分析实战视频教程...

    基于MySQL玩转SQL数据分析课程 互联网数据分析师-SQL数据分析实战视频教程 课程目录 (1)SQL与数Ju分析;目录中文件数:23个 (1) 开课-课时3SQL与数Ju库的价值.flv (2) ...

  2. 数据分析师招聘岗位分析

    数据分析师招聘岗位分析 1.本文的目的和内容 1.1.本文的目的: 通过分析能够了解公司对于数据分析岗位的要求及待遇 1.2本文的内容: 主要针对以下几个问题: 1.数据分析岗位不同城市的需求分布: ...

  3. 深圳python数据分析师招聘_Python爬取智联招聘数据分析师岗位相关信息的方法

    Python爬取智联招聘数据分析师岗位相关信息的方法 发布时间:2020-09-23 23:23:12 来源:脚本之家 阅读:88 进入智联招聘官网,在搜索界面输入'数据分析师',界面跳转,按F12查 ...

  4. 成都数据分析师招聘:北京东方国信科技股份有限公司

    北京东方国信科技股份有限公司 东方国信(北京东方国信科技股份有限公司)成立于1997年,是中国领先的大数据上市科技公司(股票代码 300166).自成立以来,东方国信就专注于大数据领域,紧跟全球大数据 ...

  5. 天马资产 | 金融数据分析师招聘(社招+实习)

    量化投资与机器学习微信公众号,是业内垂直于量化投资.对冲基金.Fintech.人工智能.大数据等领域的主流自媒体.公众号拥有来自公募.私募.券商.期货.银行.保险.高校等行业30W+关注者. 公司介绍 ...

  6. 数据分析师招聘情况之python分析

    项目简介: 通过此次数据分析解决转行数据分析师是否合适的问题 目的: 1.不同城市数据分析师需求量: 2.总体薪酬分布: 3.不同城市薪酬分布情况: 4.数据分析师对经验的要求: 5.经验对薪酬的影响 ...

  7. 数据分析案例-数据分析师岗位招聘信息可视化

  8. 【机器学习】 - 数据预处理之数据归一化(标准化)与实战分析,正则化

    一.为什么要进行数据归一化 定义:把所有数据的特征都归到 [0,1] 之间 或  均值0方差1 的过程. 原则:样本的所有特征,在特征空间中,对样本的距离产生的影响是同级的: 问题:特征数字化后,由于 ...

  9. ​案例 - 数据分析师市场需求 - 202301

    0. 项目介绍 0.1 背景 浪浪山的小野猪,想了解下外面的世界. 0.2 整体框架 1. 数据获取 1.1 目标网站 猎聘网,数据仅作为个人分析使用 1.2 抓取工具 八爪鱼.Python也可以抓, ...

最新文章

  1. Web API-路由(一)
  2. 【LeetCode】128. 最长连续序列
  3. ensp路由器无法启动_品胜云路由器Breed刷入详细教程,技巧和注意事项,功能大增...
  4. .Net MVC Cache 缓存技术总结
  5. win2000/2003 Discuz生存环境搭建及基础优化 攻略
  6. ubuntu16.04 TLS安装java
  7. 解决RTMP推送时间戳问题引起HLS切片不均匀导致手机浏览器播放卡顿的问题
  8. 记录自己的心路文字~
  9. 21天学通C语言-学习笔记(1)
  10. 一文读懂APU/BPU/CPU/DPU/EPU/FPU/GPU等处理器
  11. 小窗终曲说策划(有空就看看吧,可能对设计想法有所帮助,不仅仅是游戏方面
  12. 软件项目管理EAC、ETC的计算
  13. ValueError: Cannot assign “<...>“: the current database router prevents this relation.
  14. JAVA项目接入腾讯应用宝YSDK平台之QQ微信登录接入模式详解
  15. UNIX SIGTERM等信号意义
  16. 先验概率、后验概率、条件概率
  17. 炼狱与逐光——我的十杰博客获奖感言
  18. 浏览器性能和兼容性测试
  19. c语言读文件编译,C语言读取wav文件的问题,请大侠,编译问题。
  20. 前端每日实战:97# 视频演示如何用纯 CSS 创作一组昂首阔步的圆点

热门文章

  1. 线程通信,生产者消费者问题案例,模拟来电提醒和接听电话
  2. C语言随机刷新,C语言 刷新缓冲区
  3. HTTP网络连接相关知识整理(三):网络错误异常
  4. fastadmin 数据导出,设置excel行高和限制图片大小
  5. Note For Linux By Jes(16)-软件安装:原始码与 Tarball
  6. NHibernate3剖析:Configuration篇之SessionFactory lambda配置
  7. 生育登记服务制度啥意思?生育服务证和准生证一回事吗?生育那些事
  8. 绘声绘影导出视频过大
  9. Android中识别手柄JAVA_android蓝牙手柄监听 BluetoothGamepad
  10. 巯基吡啶PEG巯基吡啶,OPSS-PEG-OPSS