某招聘网站“数据分析”相关岗位招聘信息爬取并分析 |
您所在的位置:网站首页 › 数据分析人员招聘网 › 某招聘网站“数据分析”相关岗位招聘信息爬取并分析 |
确定目标
简单分析数据分析相关岗位的薪酬状况及技能要求;尝试数据分析从数据获取到数据分析报告撰写的整个数据分析流程,学习爬虫、数据清洗、数据分析相关技巧。 ![]() 获取的岗位数据来源于某招聘网站,采取爬虫的方式获取,岗位搜索的关键词为:“数据分析”,爬取的信息包括:岗位名称,城市,薪酬,学历要求,经验要求,岗位描述/职责,分五次爬取,爬取了北京、上海、广州、深圳、南京五个城市的岗位数据共1472条 数据清洗在清洗之前,我已经将爬取的北京、上海、广州、深圳、南京的数据合并为一个excel文件,以下直接读取(使用read_csv时出现错误,可能是因为岗位职责/描述一栏,数据本身就包含逗号的缘故,故使用read_excel),这次数据清洗主要使用pandas库,的清洗工作包括: 删除无效的列和行,增加索引列对薪酬列进行分割,分为最低薪酬salary_min和最高薪酬salary_max,去除无关字符工作经验列划分类别:应届毕业生、一年以下、1-3年、3-5年、5-10年、10年以上,去除无关字符学历列划分类别:大专、本科、硕士、博士岗位职责/描述列去除无关字符 数据清洗代码如下: from pandas import Series,DataFrame import pandas as pd #读取文件 parsed = pd.read_excel('C:/Users/King/Desktop/拉勾网数据分析/拉勾网数据.xlsx', names = ['position','company','salary','city','expe','edu','desc']) #新增列(后面作为索引),删除‘公司’列 parsed = parsed.reindex(columns = ['seq','position','salary','city','expe','edu','desc']) #删除无关的行,指定索引列并赋值 parsed = parsed[~(parsed['position'].isin(['职位']))] parsed['seq'] = range(parsed.iloc[:,0].size) parsed.set_index(['seq'],inplace=True) #薪酬列分割为salary_min和salary_max salary_m = parsed['salary'].str.replace('k','').str.replace('K','').str.split('-', expand = True) parsed = parsed.drop('salary', axis = 1).join(salary_m) parsed.rename(columns = {0:'salary_min',1:'salary_max'}, inplace=True) #经验列统一类别 expe_m = parsed['expe'].str.strip('经验年').str.replace('不限','应届毕业生') parsed = parsed.drop('expe', axis = 1).join(expe_m) #学历列统一类别 edu_c = parsed['edu'].str.replace(r'.*不限.*','大专').str.replace(r'及以上.*','') parsed = parsed.drop('edu', axis = 1).join(edu_c) #岗位职责列去除无关字符 desc_c = parsed['desc'].str.replace(r'[\n,"岗位职责","职位描述","职责描述","工作职责",":"]','') parsed = parsed.drop('desc',axis = 1).join(desc_c)清洗后的数据预览如下图: 这次采集的数据维度较少,仅进行简单的分析,不涉及高深的统计学理论 基本描述代码如下: #获取不同城市的岗位数量 city_num = parsed['city'].value_counts() city_s = city_num.index.tolist() num_s = [i for i in city_num] #获取不同经验段岗位的数量 expe_num = parsed['expe'].value_counts() expe_e = expe_num.index.tolist() num_e = [i for i in expe_num] #开始画图 from pyecharts import Grid,Bar,Pie bar = Bar('各城市岗位数量',title_pos='50%') bar.add('城市',city_s,num_s, mark_point = ['max','min'],legend_pos="70%") bar_expe = Bar('各经验段岗位数量') bar_expe.add('经验要求/年',expe_e,num_e,xaxis_rotate=30,mark_point = ['average'],legend_pos="20%") pie = Pie("各经验段岗位数量占比",title_top="50%") pie.add("", expe_e, num_e, is_random=True,center = ['25%',"75%"], radius=["10%", '25%'], rosetype="area", is_legend_show=False, is_label_show=True) pie_c = Pie('各城市岗位数量占比',title_top="50%", title_pos="50%") pie_c.add("", city_s, num_s, is_random=True,center = ['75%','75%'], radius=['10%', '25%'], rosetype="area", is_legend_show=False, is_label_show=True) grid = Grid(height = 800, width = 950) grid.add(bar, grid_left="60%", grid_bottom = '60%') grid.add(bar_expe, grid_right="60%", grid_bottom = "60%") grid.add(pie_c, grid_right = '60%', grid_top = "60%") grid.add(pie, grid_left = "60%", grid_top = "60") grid
先使用pyecharts库绘制箱线图,代码如下: #获得数据,绘制箱线图 from pyecharts import Boxplot #城市数据,作为x轴 x_axis = '北京,上海,广州,深圳,南京'.split(',') #获得最低和最高薪酬组的数据,作为y轴数据 parsed['salary_min'] = parsed['salary_min'].astype(int) parsed['salary_max'] = parsed['salary_max'].astype(int) ls_min = [] ls_max = [] for x in x_axis: lt_min = parsed[parsed['city'] == x]['salary_min'].tolist() ls_min.append(lt_min) lt_max = parsed[parsed['city'] == x]['salary_max'].tolist() ls_max.append(lt_max) #开始绘制 boxplot = Boxplot('各城市最低和最高工资的箱线图') boxplot.add('最低薪酬',x_axis, boxplot.prepare_data(ls_min)) boxplot.add('最高薪酬',x_axis, boxplot.prepare_data(ls_max)) boxplot效果如下
以上是使用jieba库分词,清除无关的字符等,下面绘制招聘需求里高频词汇的词云。 #绘制招聘需求里高频词汇的词云 words = [] counts_1 = [] for i in range(60): word, count = items[i] words.append(word) counts_1.append(count) from pyecharts import WordCloud wordcloud = WordCloud(width=700, height=500) wordcloud.add("", words, counts_1, word_size_range=[20, 100]) wordcloud
接下来在看现在企业招聘数据分析师一般要求哪些技能: ls_add = 'SQL,PYTHON,SPSS,TABLEAU,OFFICE,EXCEL,PPT,HADOOP,JAVA,R,SAS,SPARK,HIVE,WORD,ABTEST,MYSQL,MATLAB'.split(',') ls_num = [] for i in ls_add: ls_num.append(t.count(i)) ls = list(zip(ls_add, ls_num)) ls.sort(key = lambda x:x[1],reverse=True) ls_tec,ls_count = zip(*ls) ls_count #统计各技能出现的频次,绘制条形图 bar1 = Bar("技能需求条形图") bar1.add("", ls_tec[1:], ls_count[1:],xaxis_rotate= -30 , is_label_show=True,is_datazoom_show=True, datazoom_type="both", datazoom_range=[7, 16]) bar1
最后,再给出一个使用Jupyter完成整个流程的截图: |
今日新闻 |
点击排行 |
|
推荐新闻 |
图片新闻 |
|
专题文章 |
CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭 |