Python数据清洗实战案例–拉勾招聘数据清洗

(本篇博客主要介绍个人对一份数据的清洗代码和清洗效果)
主要涉及应用的库是numpy、pandas、matplotlib,话不多说,直接上代码

#全部行都能输出
from IPython.core.interactiveshell import InteractiveShell
InteractiveShell.ast_node_interactivity = "all"
#导包
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
plt.style.use('seaborn')
plt.rcParams['axes.unicode_minus']=False    #设置显示中文后,负号显示受影响。解决坐标轴上乱码问题
plt.rcParams['font.family'] = ['Arial Unicode MS'] #mac解决中文显示问题# 首先导入数据df = pd.read_csv(r"C:\Users\Administrator\Desktop\1201\数据清洗\第五天\拉钩上\lagou1.csv")
df.head()

观察一下原始数据的状态

# 查看数据的形状和各列信息
df.shape
df.info()

# 提取出公司名称缺失的行. 并删除该行
df[df.公司名称.isnull()]

缺失值处理

# 删除这一列
df.drop(index=872, inplace=True)
# 提取出城市中有缺失的行
df[df.城市.isnull()]

# 根据公司地点信息将城市中有缺失的行填充成武汉
df['城市'] = df.城市.fillna('武汉')

接下来查看城市的类别和计数, 并用直方图画出, 随着城市变化, 职位数目的变化, 降序

a = df.城市.value_counts()
a


接下来就是利用删除缺失值的方式继续处理其他的列,如果有信息可以指示替换缺失值的时候就替换,方法同上面两种缺失值处理方法,这里就不一一赘述了。

处理异常值和异常列

把公司地点的中括号和公司短评中的引号去掉

# 查看数据情况
s = '[东城区]'
s


处理数据

# 定义一个函数取出目标值
def x(s):return s[1:-1]
#  利用Series对象的map属性添加出新的公司地点
df['公司地点'] = df.公司地点.map(x)


用同样的方法处理公司短评列:

def x(s):return s.replace('“', '').replace('”', '')df['公司短评'] = df.公司短评.map(x)

处理后的数据情况

把 工位要求 改为 公司要求

df.rename(columns = {'工位要求':'公司要求'}, inplace=True)

将公司要求这一列拆分成薪资, 经验要求,学历要求

s = df.公司要求[0]
s
a = df.公司要求.map(lambda s:s.split()[0])
a
df['薪资'] = a
df[df.薪资.map(lambda s:'年'in s)]
b = df.公司要求.map(lambda s:'经验1-3年 ' in s)
b
df[(df.城市=='南京') & b]  # 7k--10k
df.loc[[868, 875], '薪资'] = ['7k-10k',' 7k-10k']
df.loc[[868, 875], '薪资']
df[df.薪资.map(lambda s:'年'in s)]
df.drop(index=1624, inplace=True)
# 观察结果
df.薪资.value_counts().index.tolist()

以同样的方法处理经验要求和学历要求,代码不做一一赘述。

将公司级别拆分成公司领域、融资阶段、公司规模三列 , 然后删除该列

a = df.公司级别.str.split('/', expand=True)
a.columns = ['公司领域','融资阶段', '公司规模']
a
df = pd.concat([df, a], axis=1, sort=False)
df

处理结果为:

重置索引

df.reset_index(drop=True, inplace=True)

新增列 平均薪资, 放在薪资的后面

def x(s):a = s.replace('K', 'k').replace('k', '').split('-')return (int(a[0])+int(a[-1]))/2*1000df.薪资.map(x)

按照城市进行分组, 查看平均薪资的平均值和标准差

gp = df.groupby('城市')
gp
a = gp['平均薪资'].agg(['mean', 'std'])
a

可视化一些数据

将上表按照平均值进行降序, 并画出, 随着城市变化, 平均薪资的直方图

b = a['mean'].sort_values(ascending=False)
b
plt.figure(figsize=(8, 6), dpi=80)
plt.bar(b.index, b, color='c')
plt.title('各城市平均薪资直方图');


将上诉平均薪资的分析过程封装成一个函数

def x(c):gp =df.groupby(c)a = gp['平均薪资'].agg('mean').sort_values(ascending=False)if len(a)<=8:b = aelse:b=a[0:8]plt.figure(figsize=(8, 6), dpi=80)plt.bar(b.index, b, color='c')plt.xticks(rotation=30)plt.title('各{}平均薪资直方图'.format(c));

查看 学历要求 与 平均薪资 的关系

x('学历要求')


公司领域 与 平均薪资 之间的关系

x('公司领域')

画一些高阶图

技能需求饼图
统计技能需求里面一些关键字出现的次数, 比如 BI SPSS SQL Python 机器学习 数据挖掘 算法等出现的次数, 画出相对应的技能所占的饼图百分比。
统计规则如下:

1 统计 数据库 , 凡是出现 SQL Oracle MongoDB都算是数据库的
2 统计 Python, 凡是出现 Python 数据挖掘 机器学习 算法 都算是Python的
3 统计 BI
4 统计 SPSS
5 统计 Hive

s = ''
for i in df.岗位技能:s = s+' '+i
s
L = ['数据库', 'SQL', 'Oracle', 'MongoDB', 'Python', '数据挖掘', '机器学习', '算法', 'BI', 'SPSS', 'Hive']z = []
for i in L:z.append((i, s.count(i)))
print(z)

数据分析技能占比的饼图

L = [534, 205, 153, 84, 39]
plt.figure(figsize=(8, 6), dpi=80)
plt.pie(L,  labels=['数据库', 'Python',  'BI', 'SPSS', 'Hive'],  autopct='%.2f',  explode=[0, 0.1, 0, 0, 0] );
plt.title('数据分析各技能占比');


利用pyecharts画词云图

# 安装pyecharts
pip install pyecharts -i https://pypi.douban.com/simple# 处理数据中不要的部分
a = set(s.split())
a.remove('数据分析')
a.remove('分析')
a.remove('数据')
L = []
for i in a:L.append((i, s.count(i)))# 实例化一个词云图对象
wordcloud = WordCloud()
wordcloud.add(series_name='数据分析岗位技能词云图', data_pair =L, shape = 'diamond', rotate_step=0)
wordcloud.render_notebook()


地理图

a = df.城市.value_counts()
a
b = list(zip(a.index, a.values.tolist()))
b
# 导入地理类
from pyecharts.charts import Geo
# 导入配置项类
from pyecharts import options as opts# 主题类
from pyecharts.globals import ThemeType
# 设置地图北京 China
geo.add_schema(maptype='china')# 添加数据
geo.add(series_name='各城市数据分析职位地理图',  data_pair=b, type_ = 'effectScatter')# 添加全局配置项#  群居配置项下的标题配置项
geo.set_global_opts(title_opts= opts.TitleOpts(title = '全国各城市数据分析职位统计图'),# 全局配置项下的视觉设置配置项visualmap_opts=opts.VisualMapOpts(min_ = 0 , max_=450),# 全局配置项下的工具箱配置项toolbox_opts= opts.ToolboxOpts(is_show=False))# 系列配置项
geo.set_series_opts(label_opts=opts.LabelOpts(False))
geo.render_notebook()


保存图片

geo.render('地理图2.gif')

最后保存处理好的数据

df.to_csv('lagou2.csv', index=False)

Python数据清洗实战案例--拉勾招聘数据清洗相关推荐

  1. Python 爬取拉勾招聘信息

    Python 爬取拉勾招聘信息 故事背景 最近有个好哥们啊浪迫于家里工资太低,准备从北方老家那边来深圳这边找工作,啊浪是学平面设计的知道我在深圳这边于是向我打听深圳这边平面设计薪资水平,当时我有点懵逼 ...

  2. Python+Appium 实战案例

    Python+Appium 实战案例 1.获取连接的设备名称 adb devices 2.获取APP的包名和首页名称 在模拟器获取真机中打开需要测试的APP 输入:adb shell 输入:dumps ...

  3. Python开发实战案例之网络爬虫(附源码)-张子良-专题视频课程

    Python开发实战案例之网络爬虫(附源码)-35人已学习 课程介绍         课程特色: 特色1:案例驱动-围绕两大完整的Python网络爬虫实战开发案例:IT电子书下载网络爬虫和股票交易数据 ...

  4. 【Python数据挖掘实战案例】K-Means广告效果聚类分析

    作者:杨啊小强 来源:Python数据科学修炼之路 本案例的业务场景: 假如你们公司投放广告的渠道很多,每个渠道的客户性质也可能不同,比如在优酷视频投广告和今日头条投放广告,效果可能会有差异.现在需要 ...

  5. Python应用实战案例-深入浅出Python随机森林预测实战(附源码)

    前言 组合算法也叫集成学习,在金融行业或非图像识别领域,效果有时甚至比深度学习还要好.能够理解基本原理并将代码用于实际的业务案例是本文的目标,本文将详细介绍如何利用Python实现集成学习中随机森林这 ...

  6. Python爬虫实战案例一:爬取猫眼电影

    背景 笔者上一篇文章<基于猫眼票房数据的可视化分析>中爬取了猫眼实时票房数据,用于展示近三年电影票房概况.由于数据中缺少导演/演员/编剧阵容等信息,所以爬取猫眼电影数据进行补充.关于爬虫的 ...

  7. Python应用实战案例-Pythongeopandas包详解(附大量案例及代码)

    前言 以下为博主为大家准备的人工智能&算法研究类精品专栏,喜欢的小伙伴自行下载. 深度学习100例全系列详细教程  深度学习算法原理介绍及应用案例 tensorflow从入门到精通100讲 深 ...

  8. Python爬虫实战案例:爬取新闻资讯

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 一个简单的Python资讯采集案例,列表页到详情页,到数据保存,保存为tx ...

  9. python数据清洗---实战案例(清洗csv文件)

    我也是最近才开始这方面的学习,这篇就当作学习的笔记,记录一下学习的过程 目录 所以我们现在要解决的问题就是删除列名中的空格 接下来要解决的问题就是处理文件中的重复数据 接下来要处理的问题就是补全数据中 ...

最新文章

  1. mysql 不同连接的事务 会嵌套_MySQL——事务
  2. android 宏替换_android 模拟宏定义,实现Debug amp; Release 模式-一团网
  3. Error: vue-loader requires @vue/compiler-sfc to be
  4. Py之wxPython:利用wxPython设计GUI界面(图片背景+简单按钮)
  5. Linux优化不知如何下手?那你的看看这篇文章了
  6. poj - 2356 Find a multiple
  7. python中的字典推导式_17.python 字典推导式(经典代码)
  8. 前端学习(2524):自定义指令(钩子函数)
  9. 常用技巧 —— 位运算 —— 异或 1 的妙处
  10. 近6年语音合成领域都有哪些论文?
  11. leetcode1319. 连通网络的操作次数
  12. SpringBoot系列: Eclipse+Maven环境准备
  13. 不玩游戏,855和730处理器在日常应用的速度差别有多大?
  14. linux7mysql集群_linux下mysql集群搭建
  15. 宏基4752g linux驱动下载,宏碁笔记本及应用程序驱动下载_硬件驱动下载
  16. 导出excel文件对空值用“--“占位处理
  17. Linux命令对应的英文及整体学习法
  18. jQuery 中ajax回调函数获得的数据格式问题
  19. 电子商务购物网站的设计与实现(论文+源码)_kaic
  20. ELK Stack在多项目情况下filebeat与logstash的多文件配置

热门文章

  1. python 马尔科夫链_用Python入门不明觉厉的马尔可夫链蒙特卡罗(附案例代码)...
  2. Romberg(龙贝格)求积公式求解数值积分时的注意事项
  3. java计算机毕业设计桂林餐饮服务平台(附源码、数据库)
  4. [SDU软件工程实践]Blog4-processLine及processCmd
  5. 【联邦学习】IID与非IID数据
  6. 二叉树前序遍历,后序遍历
  7. 微信小程序运动步数java_微信小程序实现运动步数排行(可删除)
  8. Mybatis注解开发单表操作
  9. python广告营销平台_荐用Python写一个营销号垃圾视频生成器
  10. DDR4是什么?双通道四通道又是什么?小编带你挑内存