推广 热搜: 行业  设备    系统  参数  经纪    教师  机械  中国 

数据分析师实战篇1

   日期:2024-11-10     作者:n19v1    caijiyuan   评论:0    移动:http://ktsh.xhstdz.com/mobile/news/3139.html
核心提示:一、数据读取6876 rows × 17 columns 二、数据浏览 这里列举出了数据集拥有的各类字段,一共有6876个,其中company

一、数据读取

数据分析师实战篇1

 
 
 

6876 rows × 17 columns

二、数据浏览

 
 

这里列举出了数据集拥有的各类字段,一共有6876个,其中companyLabelList,businessZones,firstType,secondType,positionLables都存在为空的情况。公司id和职位id为数字,其他都是字符串。

因为数据集的数据比较多,如果我们只想浏览部分的话,可以使用head函数,显示头部的数据,默认5,也可以自由设置参数,如果是尾部数据则是tail。

 
 

三、数据清洗

数据集中,最主要的脏数据是薪资这块,后续我们要拆成单独的两列。

看一下是否有重复的数据。

 
 

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

使用drop_duplicates清洗掉。

 

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

 
 
 

接下来加工salary薪资字段。目的是计算出薪资下限以及薪资上限。薪资内容没有特殊的规律,既有小写k,也有大小K,还有「k以上」这种写法,k以上只能上下限默认相同。

我们定义了个cut_word函数,它查找「-」符号所在的位置,并且截取薪资范围开头至K之间的数字,也就是我们想要的薪资下限。apply将cut_word函数应用在salary列的所有行。

但是[k以上]这类没有“-”怎么处理呢?find函数找不到该符号会返回-1,所以这里使用一个if函数加以判断

因为python大小写敏感,我们用upper函数将k都转换为K,然后以K作为截取。

薪资上限topsalary的思路也相近,只是变成截取后半部分。在cut_word函数增加了新的参数用以判断返回bottom还是top。

 
 
 
 
 

此时df_duplicates已经增加了两个字段,一个是bottomsalary,一个是topsalary,也就是最低和最高薪资

再分别把它们的数据类型转换成数字“int”,并计算平均薪资

 
 
 
 

注意,到这里为止只是把两列的数据类型预览为数字而已,其本身真正的数据类型并没有发生变化,要想改变其本身的数据类型,需要重新对其进行赋值,如下操作

 
 

此时两列的数据类型才更改为数字,使用lambda匿名函数计算平均薪资如下,lambda x: ******* ,前面的lambda x:理解为输入,后面的星号区域则是针对输入的x进行运算。案例中,因为同时对top和bottom求平均值,所以需要加上x.bottomSalary和x.topSalary。其中axis=1是对行进行操作,axis=0是对列进行操作。

 
 
 
 

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

四、数据分析

 
 

先对数据进行几个描述统计

 
 

value_counts是计数,统计所有非零元素的个数,以降序的方式输出Series。数据中可以看到北京招募的数据分析师是最多的。

我们可以依次分析数据分析师的学历要求,工作年限要求。

 
 

可见,对数据分析师的学历要求是本科的最多数,其次是大专。

 
 

可见,对数据分析师3-5年的工作经验需求是最多的,其次是1-3年。

针对数据分析师的薪资,我们用describe函数。

 

它能快速生成各类统计指标。数据分析师的薪资的平均数是17k,中位数是15k,两者相差不大,最大薪资在75k,应该是数据科学家或者数据分析总监档位的水平。标准差在8.99k,有一定的波动性,大部分分析师薪资在17+—9k之间。

五、数据可视化

 

pandas自带绘图函数,它是以matplotlib包为基础封装,所以两者能够结合使用。%matplotlib inline是jupyter自带的方式,允许图表在cell中输出。plt.style.use(‘ggplot’)使用R语言中的ggplot2配色作为绘图风格,纯粹为了好看。

 
 

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BWRXXZYv-1584262605325)(output_57_1.png)]

图表列出了数据分析师薪资的分布,因为大部分薪资集中20k以下,为了更细的粒度。将直方图的宽距继续缩小。

 
 

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-I7IDCjpx-1584262605329)(output_59_1.png)]

数据分布呈双峰状,因为原始数据来源于招聘网站的爬取,薪资很容易集中在某个区间,不是真实薪资的反应(10~20k的区间,以本文的计算公式,只会粗暴地落在15k,而非均匀分布)。

现在观察不同城市、不同学历对薪资的影响。箱线图是最佳的观测方式。

 
 

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VeEW5LIP-1584262605330)(output_62_2.png)]

图表的标签出了问题,出现了白框,主要是图表默认用英文字体,而这里的都是中文,导致了冲突。所以需要改用matplotlib。

 

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rRlTO0gW-1584262605334)(output_64_0.png)]

首先加载字体管理包,设置一个载入中文字体的变量,不同系统的路径不一样。boxplot是我们调用的箱线图函数,column选择箱线图的数值,by是选择分类变量,figsize是尺寸。

ax.get_xticklabels获取坐标轴刻度,即无法正确显示城市名的白框,利用set_fontpeoperties更改字体。于是获得了我们想要的箱线图。

从图上我们看到,北京的数据分析师薪资高于其他城市,尤其是中位数。上海和深圳稍次,广州甚至不如杭州。

 

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Vinw6o1J-1584262605336)(output_67_0.png)]

从学历看,博士薪资遥遥领先,虽然在top区域不如本科和硕士,这点我们要后续分析。大专学历稍有弱势。

 

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-T0Iwc8go-1584262605356)(output_69_0.png)]

工作年限看,薪资的差距进一步拉大,毕业生和工作多年的不在一个梯度。虽然没有其他行业的数据对比,但是可以确定,数据分析师的职场上升路线还是挺光明的。

到目前为止,我们了解了城市、年限和学历对薪资的影响,但这些都是单一的变量,现在想知道北京和上海这两座城市,学历对薪资的影响。

这里需要使用isin函数,用来筛选某一列的某些值。

 

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0ur9wfge-1584262605358)(output_73_0.png)]

从图上可以看到,不同学历背景下,北京都是稍优于上海的,北京愿意花费更多薪资吸引数据分析师,而在博士这个档次,也是一个大幅度的跨越。我们不妨寻找其中的原因

 
 
 

它返回的是不同城市的各列计数结果,因为没有NaN,每列结果都是相等的。现在它和value_counts等价。

 
 

换成mean,计算出了不同城市的平均薪资。因为mean方法只针对数值,而各列中只有avgSalary是数值,于是返回了这个唯一结果。

 
 

按城市和学历分组计算了平均薪资。后面再调用unstack方法,进行行列转置,这样看的就更清楚了。在不同城市中,博士学历最高的薪资在深圳,硕士学历最高的薪资在杭州。北京综合薪资最好。这个分析结论有没有问题呢?不妨先看招聘人数。

 
 

这次换成count,我们在groupby后面加一个avgSalary,说明只统计avgSalary的计数结果,不用混入相同数据。图上的结果很明确了,要求博士学历的岗位只有6个,所谓的平均薪资,也只取决于公司开出的价码,波动性很强,毕竟这只是招聘薪资,不代表真实的博士在职薪资。这也解释了上面几个图表的异常。

接下来计算不同公司招聘的数据分析师数量,并且计算平均数。

 

2243 rows × 2 columns

这里使用了agg函数,同时传入count和mean方法,然后返回了不同公司的计数和平均值两个结果。所以前文的mean,count,其实都省略了agg。agg除了系统自带的几个函数,它也支持自定义函数。

 
 

上图用lamba函数,返回了不同公司中最高薪资和最低薪资的差值。

现在我想计算出不同城市,招聘数据分析师需求前5的公司,应该如何处理?agg虽然能返回计数也能排序,但它返回的是所有结果,前五还需要手工计算。能不能直接返回前五结果?当然可以,这里再次请出apply。

 
 

自定义了函数topN,将传入的数据计数,并且从大到小返回前五的数据。然后以city聚合分组,因为求的是前5的公司,所以对companyShortName调用topN函数。

同样的,如果我想知道不同城市,各职位招聘数前五,也能直接调用topN

 
 

可见,虽说是数据分析师,但其实有不少的开发工程师,数据产品经理等。这是抓取下来数据的缺点,它反应的不止是数据分析师,而是数据领域。不同的城市的需求不一样,北京各岗位的需求都比上海高。

同样的,如果我想知道不同城市,各工作年限招聘数前五,也能直接调用topN

 
 

可见,上海,北京,南京工作年限3-5年的招聘数量最多,其次是1-3年。

类似的,我想知道不同城市,各职位平均薪资前五的公司。

 
 

65 rows × 8 columns

这里创建了一个top1N的函数,对平均薪资进行排序,再对城市分组调用top1N函数,由于没有指定某一个字段,所以返回的就是所有字段,若只想返回公司名称,则只需要再后面添加字段名即可

 

65 rows × 2 columns

运用group by,我们已经能随意组合不同维度。接下来配合group by作图。

 

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ATOnT7Y3-1584262605362)(output_105_0.png)]

多重聚合在作图上面没有太大差异,行列数据转置不要混淆即可。

 
 

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yhRVgGaP-1584262605363)(output_107_1.png)]

另外一种分析思路是对数据进行深加工。我们将薪资设立出不同的level。

 
 
 

5031 rows × 2 columns

cut的作用是分桶,它也是数据分析常用的一种方法,将不同数据划分出不同等级,也就是将数值型数据加工成分类数据。cut可以等距划分,传入一个数字就好。这里为了更好的区分,我传入了一组列表进行人工划分,加工成相应的标签。

 

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3dJAWFJS-1584262605365)(output_112_0.png)]

用lambda转换百分比,然后作堆积百分比柱形图(matplotlib好像没有直接调用的函数)。这里可以较为清晰的看到不同等级在不同地区的薪资占比。它比箱线图和直方图的好处在于,通过人工划分,具备业务含义。0~3是实习生的价位,3~6是刚毕业没有基础的新人,整理数据那种,6~10是有一定基础的,以此类推。

现在只剩下最后一列数据没有处理,标签数据。

 
 

现在的目的是统计数据分析师的标签。它只是看上去干净的数据,元素中的[]是无意义的,它是字符串的一部分,和数组没有关系。

 
 

str方法允许我们针对列中的元素,进行字符串相关的处理,这里的[1:-1]不再是Dataframe和Series的切片,而是对字符串截取,这里把[]都截取掉了。如果漏了str,就变成选取Series第二行至最后一行的数据,切记。

 
 

使用完str后,它返回的仍旧是Series,当我们想要再次用replace去除空格。还是需要添加str的。现在的数据已经干净不少。

 
 

可见positionLables本身有空值,所以要删除,不然容易报错。再次用str.split方法,把元素中的标签按「,」拆分成列表。

 
 

5007 rows × 267 columns

通过apply和value_counts函数统计标签数。因为各行元素已经转换成了列表,所以value_counts会逐行计算列表中的标签,apply的灵活性就在于此,它将value_counts应用在行上,最后将结果组成一张新表。

 
 

将空值删除,并且重置为Dataframe,此时level_0为标签名,level_1为df_index的索引,也可以认为它对应着一个职位,0是该标签在职位中出现的次数,之前我没有命名,所以才会显示0。部分职位的标签可能出现多次,这里忽略它。

删除线格式 ```python

本文地址:http://ktsh.xhstdz.com/news/3139.html    物流园资讯网 http://ktsh.xhstdz.com/ , 查看更多

特别提示:本信息由相关用户自行提供,真实性未证实,仅供参考。请谨慎采用,风险自负。

 
 
更多>同类最新文章
0相关评论

文章列表
相关文章
最新动态
推荐图文
最新文章
点击排行
网站首页  |  关于我们  |  联系方式  |  使用协议  |  版权隐私  |  网站地图  |  排名推广  |  广告服务  |  积分换礼  |  网站留言  |  RSS订阅  |  违规举报  |  鄂ICP备2020018471号