背景:作为个数据分析小菜鸟,深知知行合一的重要性。基于本人目前要在杭州寻找一份数据分析的初阶工作的现实考量,故决定采用前程无忧上关键词‘数据分析’和地点设置在杭州上的招聘信息作为此次数据分析的数据来源来进行实操,同时也为了能让自己更好的了解目前杭州关于数据分析岗位的招聘市场以及岗位的成长性作一个简单的前瞻和展望。
方法:首先通过爬虫的request和BeatifulSoup库来进行所需数据的抓取(此次主要借鉴网上的源代码进行适当修改爬取杭州的数据)。然后爬取的数据进行适当的清洗和整理,进行可视化和分析操作,主要用到numpy,pandas以及matpotlib和wordcloud等python库。最后对所获的图表进行合理的分析和适当的展望。此次分析采集数据时间为8月6日,样本数为2372.
具体代码实现:
# -*- coding: utf-8 -*-
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt #首先还是我们的老三样
df = pd.read_csv(r'/Users/herenyi/Downloads/前程无忧招聘信息.csv', encoding = 'UTF-8') #读取文件
df.info() #快速浏览文件
这就是大致数据全览,数据类型各项标签都为字符串格式。不过这里要提醒下,自己把列名换成英文比较好,不然等下引用列可能会出现不必要的麻烦。接下来就是选取我们想要的列,以及数据是否有重复值和缺失值了,我们继续下一步。
df_norepeat = df.drop_duplicates(subset =[ '公司'], keep = 'first' )
df_norepeat.info() #我们通过drop_duplicates函数去除重复值,并且新建一列以便后面操作。并用info函数加以个数确认。
接下来我们处理缺失值,本次报告我们需要的主要数据方面的就是工资这列,所以我们需要处理工资这列的缺失值。而工资这列只有2325个值,相对于公司数字2338来说,是有缺失的,我们去掉没有工资记录的行。
df_clean = df_norepeat.dropna(subset = ['薪资']) #去掉没有工资的空值,并传递到df_clean中。
df_clean.info()
这时候每个工资和公司都一一标定了,很舒服了。接下来我们要进行薪资里的字符串进行处理,这也是最复杂的部分,因为里面有各种格式。
df_clean[‘薪资’] # 让我们来看看薪资的构成。
我们可以看到,单位有以千/月,万/月,万/年主要这三种格式,我们需要把他们全部转化为。由于还不怎么熟悉正则表达,我们可以尝试分割-来分隔最高和最低工资,以及如何区分单位的差别,我们需要定义个函数。
def cut_word(word, method): #传入两个参数,一个是数据集,一个是方法
position1 = word.find('年')
position2 = word.find('万')
position3 = word.find('-') #定位到三个地方
if position1 != -1:
bottom = float(word[:position3]) * 10 / 12
top = float(word[position3 + 1:position2]) * 10 / 12 #首先如果找得到年,那单位即为为万/年,此时的最低和最高薪水就可以转化单位了。
elif position2 != -1 & position1 == -1:
bottom = float(word[:position3]) * 10
top = float(word[position3 + 1:position2]) * 10 #如果找不到年且找得到万,那单位即为万/月,计算最低最高薪水。
else:
bottom = float(word[:position3])
top = float(word[position3 + 1:position3 + 2]) #接下来就是千/月了,常规处理。
if method == 'bottom':
return bottom
else:
return top
df_clean['topsalary']= df_clean.薪资.apply(cut_word, method = 'top')
df_clean['bottomsalary']= df_clean.薪资.apply(cut_word, method = 'bottom') #求出最高和最低工资
然后我们发现这么一个错误,貌似我们看到的前二十项里面不包含这样的格式,从截取的片段来看260元应该