从去年起,大数据的概念莫名其妙的就火起来了,淘宝智能推荐、阿尔法dog战败柯洁、滴滴杀熟、Facebook数据门等事件不断冲击着我们的思维。作为数据库开发岗的我每天处理最多就是各式各样的报表需求,几乎快成为了sql取数机。面对企业级的数据我觉得我能做的应该远远不止这些,应该要对这些数据负起责任,就萌生了数据分析岗位发展的想法,于是就有了如下的分析过程。
分析目的:
1、查看哪个城市对数据分析职位的需求最多
2、数据分析职位对学历的要求
3、数据分析职位的薪资情况
4、数据分析有哪些标签
一、数据初识
使用pandas载入数据,先引入数据处理相关的库
载入完成后,对数据进行一个快速的浏览
每个字段所代表的意思
city:城市
companyFullName:公司全名 companyId:公司ID
companyLabelList:公司介绍标签
companyShortName:公司简称
companySize:公司大小
businessZones:公司所在商区
firstType:职位所属一级类目
secondType:职业所属二级类目
education:教育要求
industryField:公司所属领域
positionId:职位ID
positionAdvantage:职位福利
positionName:职位名称
positionLables:职位标签
salary:薪水
workYear:工作年限要求
数据总的有17个列字段,有6876行数据,其中companyLabelList、businessZones、firstType、secondType、positionLables都存在数据为空的情况。公司id和职位id为数字,其他都是字符串。
正常情况下,薪资、职位名称、城市、公司这几个字段是我们比较关注的,其中薪资这个字段的展示格式是字符串,不方便处理,后续我们需要对其进行数据处理,要拆成2列,并转成数值类型,才能进行计算。
二、数据清洗
1、重复值处理
#查看是否有重复值,unique函数可以返回唯一值,数据集中positionId是职位ID,值唯一。#配合len函数计算出唯一值共有5031个,说明有多出来的重复值。len(laGouDf.positionId.unique())
接下来,处理salary字段,将薪资拆分成2列,目的是算出下限和上限。
经过观察,薪资这列数据,有大写K,小写k,还有‘15k以上’这种类型的数据,k以上,对其做上下限相等的处理
这里需要用到pandas中的apply,它可以针对DataFrame中的一行或者一列数据进行操作,允许使用自定义函数。
def cut_word(word): position = word.find('-') #找出“-”所在的位置 bottomSalary = word[:position-1] #切出薪资下限的数字字段 return bottomSalary#打印salary字段前5行查看laGouDf_dropduplicates.salary.apply(cut_word).head()
但是,对于“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#打印salary字段前5行查看laGouDf_dropduplicates.salary.apply(cut_word).head(5)
如果find函数返回的不是-1,就按正常的方式截取;如果是-1,那就先把k转成大写的K,再截取K以前的数字,这样就能取得“K以上”的薪资数了,薪资上限的思路是类似的。薪资没有小数,因此转成int类型即可。
laGouDf_dropduplicates.bottomSalary = laGouDf_dropduplicates.bottomSalary.astype('int')laGouDf_dropduplicates.topSalary = laGouDf_dropduplicates.topSalary.astype('int')
接下来计算平均工资,使用lamdba作为一次性函数。
laGouDf_dropduplicates['avgSalary'] = laGouDf_dropduplicates.apply(lambda x:(x.bottomSalary + x.topSalary)/2,axis=1)
针对想要分析的内容,数据已经清洗完成。
三、数据分析与图表可视化
选择我们需要的字段,先对数据做下描述统计
可以看出工资的平均数在17.11,中位数是15.0,最大是75,最小是1.5,这可能是实习生,或者是随便输入的数据。标准差在8.99,说明数据分析的薪资范围大部分是在17+-8.99之间。
接下来统计下各个城市对数据分析岗位的需求情况,由图可以看出北京对数据分析师的需求对于其它城市有绝对性的优势。
接着,查看下平均工资的直方图,看下分布情况
可以看到薪资在15k左右是最多的。
再接着看不同城市、不同学历对薪资的影响。
从图中,可以看出,北京的薪资是高于其他城市的,尤其是中位数,比其他城市高不少,上海、深圳次之。厦门排在倒数第三,数据分析薪资比较没竞争力。
学历看,博士薪资最高。本科与硕士相差不大,大专学历比较低,优势不大。
按工作经验来看,10年以上经验薪资最高,薪资是随着工作年限增加,逐年递增的。有经验的数据分析师还是很吃香的,而且薪资增长也不错。
这里可以较为清晰的看到不同等级在不同地区的薪资占比。对每条数据进的平均薪资分为0-3、3-5、5-10、10-15、15-20、20-30、30-100七个等级来看,发现不管在哪个城市数据分析相关岗位的薪资也都在5-15K的范围最多。它比箱线图和直方图的好处在于,通过人工划分,具备业务含义。0~3是实习生的价位,3~6是刚毕业没有基础的新人,整理数据那种,6~10是有一定基础的,以此类推。
最后只剩下最后一列数据没有处理,标签数据,利用wordcloud库处理这列文本数据生成词云,空间位置最大的为出现频率最高的词汇。不难看出这些岗位最重要的标签是数据,负荷大数据时代的特征,各个公司也越来越重视数据的重要性。
四、总结
1、北京对数据分析是需求最大的,上海、深圳次之且薪资也服从同样规律。
2、数据分析的薪资待遇还是挺不错的,尤其是有3-5年工作经验的数据分析师。
3、对于学历的要求,本科与硕士居多。