使用excel、python、tableau对招聘数据进行数据处理及可视化分析

article/2025/3/4 13:51:05

招聘数据数据分析及可视化

  • 数据来源
  • 前言
  • 一、观察数据
    • 删除重复值
    • 数据加工
  • 二、利用python进行数据分析和可视化
    • 1.引入库
    • 2.读入数据
      • 观察描述统计,了解数据大概信息
    • 3.数据预处理
      • 3.1数据清洗
        • 3.1.1 删除重复值
        • 3.1.2缺失值处理
      • 3.2数据加工
    • 4.数据可视化
        • 4.1城市岗位数量
        • 4.2学历和工作经验
        • 4.3薪资情况
          • 4.3.1薪资与学历的关系
          • 4.3.2薪资与工作经验关系
          • 4.3.3薪资与岗位数量的关系
          • 4.3.4主要城市薪资水平箱线图
        • 4.4 岗位相关情况
  • 三、tableau可视化呈现
    • 1.城市岗位数量地理图及气泡图
    • 2.学历和工作要求
    • 3.薪资情况
    • 4.汇总
  • 四、分析总结
  • 总结

数据来源

本数据来自天善智能的数据分析课程提供的数据分析师相关的招聘数据

前言

由于2021春招已经启动很久了,最近为了找工作将之前完成的数据分析项目复现,同时也复习一下excel和python以及tableau相关知识。


本文根据提供的招聘信息数据进行数据分析以及可视化,使用的工具有excel,jupyter,以及tableau,展示部分代码以及数据分析过程。

一、观察数据

进行数据分析首先要知道数据是什么,有哪些内容,结构是什么样的,因此先将已有的csv文件通过excel打开观察数据,然后可通过excel进行简单的数据处理。
我们来看下数据:在这里插入图片描述可以看到有十二个字段,其中比较重要的有positionId、city、eduaction、salary、workYear这几个字段我们后续的分析中会经常用到。

删除重复值

如果这些数据存在重复值,这些重复值可能会对我们的分析产生一定的干扰,所以我们需要删除重复值。由于每个职位的positionId都是唯一的所以我们可以根据这个来判断是否存在重复值,如果存在则删除重复值。在这里插入图片描述
由于提供的数据比较干净,未发现重复值。

数据加工

我们可以看到由于薪水是以上下限显示的,不利于后续的分析,故将薪水分成三列,分别为下限,上限以及平均薪水。这个操作在excel里操作比较简单,当然也可以在利用python进行处理。这里我选择在excel里进行划分。
这里我使用find函数将salary中k的位置找出来,再用left和right函数将薪资下限和上限截取出来:
在这里插入图片描述
对值进行处理,将得到的结果全部转换为数值。然后利用替换将k给替换成空,其中可能会存在其它干扰数据这里我全部替换为空值。处理完之后顺便将平均薪资求出来,便于后续分析。
在这里插入图片描述
这样excel对数据的处理就差不多了,接下来就是把数据导入到python里进行分析和可视化。当然利用excel对处理后的数据进行数据透视也可以,这里我选择使用python。

二、利用python进行数据分析和可视化

1.引入库

引入数据分析常用库,代码如下:

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
%matplotlib inline

2.读入数据

代码如下:

data = pd.read_csv('dataanalyst.csv')
data.head()

在这里插入图片描述

观察描述统计,了解数据大概信息

代码如下:

data.describe(include=['O'])

在这里插入图片描述
这里我们可以大概了解这个数据表一共有五千多条数据,city有13个,其中北京出现的次数最多,也就是北京提供的职位数最多。还可以看到学历要求是本科的最多,工作要求是3-5年的最多等等。

data.describe()

在这里插入图片描述
这里我们主要是看薪资方面的描述统计,其中包括平均值,中位数,标准差等数据。

3.数据预处理

杂乱的数据并不利于我们的分析,我们需要对数据进行处理来获取可以用于可视化的干净数据。

3.1数据清洗

数据清洗的主要内容包括: 重复值, 缺失值以及空值的处理。

3.1.1 删除重复值

由于我们在载入之前就已经删除了重复值,这里我们可以略过。

3.1.2缺失值处理

我们先看一下哪些字段存在缺失值

#计算每个特征中的缺失值个数
data.isnull().sum()

在这里插入图片描述
我们可以看到firstType,secondType,positionLables,top 四个字段存在少量缺失值。

在pandas中对缺失值的处理方法有:

  1. 利用均值等集中趋势度量填充

  2. 利用统计模型计算出的值填充

  3. 保留缺失值

  4. 删除缺失值

由于这些数据存在极少量的缺失值,对数据几乎没有影响。这里我选择通过描述统计中出现最多的值来填充。

data.firstType.fillna(value = '技术',inplace= True)
data.secondType.fillna(value = '后端开发',inplace= True)
data.positionLables.fillna(data.positionLables.mode()[0], inplace = True)
data.top.fillna(value =21.0,inplace = True)

最后检查一下还有没有缺失值
在这里插入图片描述

3.2数据加工

这里我们需要加工的是salary字段,需要将薪资的上限和下限划分出来,同时需要求出平均工资。之前我们已经在excel里面处理过了,这里可以忽略。
到现在我们的数据处理就完成了,接下来就是可视化分析环节。

4.数据可视化

4.1城市岗位数量

data.groupby(by ='city').positionId.count().sort_values(ascending=False)

在这里插入图片描述
我们可以看到北京提供的岗位数量最多,上海、深圳、杭州也比较多。所以一线城市对数据分析师的需求量还是比较大的。

我们再来看下每个城市提供的岗位对学历要求是怎样的,这里我们需要先建立一个数据透视表:

data.pivot_table(index = 'city',columns = 'education',values = 'avg',aggfunc = 'count')

在这里插入图片描述
然后绘制出堆叠图
在这里插入图片描述
可以看到每个城市对学历要求是本科的岗位最多。

每个城市提供的岗位对工作经验要求是怎样的,绘制方法与上面相似
在这里插入图片描述
可以看到每个城市的岗位对工作经验3-5年的需求比较多.

4.2学历和工作经验

fig, ax = plt.subplots(1, 2, figsize = (18, 8))
education_count = data.education.value_counts()
workYear_count = data.workYear.value_counts()
patches, l_text, p_text = ax[0].pie(education_count, autopct = '%.2f%%', labels = education_count.index )
m = -0.01
for t in l_text[6:]:t.set_y(m)m += 0.1print(t)
for p in p_text[6:]:p.set_y(m)m += 0.1
ax[0].set_title('数据分析岗位各学历要求所占比例', fontsize = 24)
index, bar_width = np.arange(len(workYear_count)), 0.6
ax[1].barh(index*(-1) + bar_width, workYear_count, tick_label = workYear_count.index, height = bar_width)
ax[1].set_title('数据分析岗位工作经验要求', fontsize= 24)

在这里插入图片描述
学历要求多以本科,大专为主, 工作经验要求中3-5工作经验要求为主, 可见招聘主要面向的是有经验的数据分析师.

4.3薪资情况

4.3.1薪资与学历的关系
fig = plt.figure(figsize=(10,8))
Salary_education = data.groupby('education', as_index = False)['avg'].mean()
plt.bar(Salary_education.education, Salary_education.avg, width = 0.6)
for x,y in enumerate(Salary_education.avg):plt.text(x, y, '%.2f'%y, ha = 'center', va='bottom')

在这里插入图片描述
可以看到学历越高,相对薪资也就越高。其中本科和硕士的薪资水平相差不大。

4.3.2薪资与工作经验关系
Salary_Year = data.groupby('workYear', as_index = False)['avg'].mean()
plt.barh(Salary_Year.workYear, Salary_Year.avg, height = 0.6)
for x, y in enumerate(Salary_Year.avg):plt.text(y+0.1,x, '%.2f'%y, va = 'center')

在这里插入图片描述
可以看到工作经验越久,薪资水平越高。

4.3.3薪资与岗位数量的关系
fig = plt.figure(figsize = (10,9))
#各地平均工资
avg = data.groupby(by='city',as_index = False)['avg'].mean()
#各地岗位数量
city = data.groupby(by='city',as_index=False)['positionId'].count().sort_values(by = 'positionId',ascending = False)
#联合数据
city = pd.merge(avg,city,how='left',on = 'city')
plt.bar(city.city, city.positionId,width=0.4)
plt.plot(city.city, city.avg*1000, '--',color = 'r', alpha = 0.9, label='平均薪资')
for x, y in enumerate(city.avg*1000):plt.text(x, y, '%.0f'%y, ha = 'right', va='bottom')
for x, y in enumerate(city.positionId):plt.text(x, y, '%s'%y, ha = 'center', va='bottom')
plt.legend()

在这里插入图片描述
我们可以看到岗位需求的多的城市,相对的薪资水平就高。需求量少的地方,薪资水平就会降低。

4.3.4主要城市薪资水平箱线图
#将字段中的'[]',"''"除去
data1=data[data.city=='北京']['avg']
data2=data[data.city=='上海']['avg']
data3=data[data.city=='深圳']['avg']
data4=data[data.city=='杭州']['avg']
data5=data[data.city=='广州']['avg']
plt.figure(figsize=(12,6),dpi=80)
plt.boxplot([data1,data2,data3,data4,data5],labels=['北京','上海','深圳','杭州','广州'], flierprops={'marker':'o','markerfacecolor':'r','color':'k'},patch_artist=True,boxprops={'color':'k','facecolor':'#FFFACD'})
ax=plt.gca()
ax.patch.set_facecolor('#FFFAFA')
ax.patch.set_alpha(0.8)
plt.title('主要城市薪资水平箱线图',fontsize=15)
plt.ylabel('薪资(单位:k)',fontsize=12)
plt.show()

在这里插入图片描述
我们发现北京和上海两个城市的薪资水平相对两极分化大一点。

4.4 岗位相关情况

我们先来看看岗位的类型分布

fig = plt.figure(figsize=(16,6))
data.groupby(by ='firstType').positionId.count().sort_values(ascending=False).plot.bar()

在这里插入图片描述
我们可以发现大部分的岗位都是技术类的,也有一小部分是产品和设计类。
接下来我们看看岗位标签的词云图

#将字段中的'[]',"''"除去
text = data.positionLables.str[1:-1].str.replace("'","").dropna().to_string()
# 绘制词云图
plt.figure(figsize=(10,8))
wordcloud = WordCloud(font_path = "simhei.ttf",background_color = "white",min_font_size = 10,color_func = lambda *args, **kwargs:(0,0,0),width = 900, height = 600).generate(text)
plt.imshow(wordcloud)
plt.axis("off")

在这里插入图片描述
由于我们的数据全是数据分析师相关的岗位信息,所以可以看到数据分析师,分析师占据了大多数,其他的岗位还有数据挖掘,数据库,产品经理也比较多

我们再来看看岗位提供的福利词云图

text = data['positionAdvantage'].dropna().to_string()
# 绘制词云图
plt.figure(figsize=(10,8))
wordcloud = WordCloud(font_path = "simhei.ttf",background_color = "white",min_font_size = 10,color_func = lambda *args, **kwargs:(0,0,0),width = 900, height = 600).generate(text)
plt.imshow(wordcloud)
plt.axis("off")

在这里插入图片描述
我们看到大部分公司的福利待遇都是五险一金,弹性工作,发展空间大,带薪年假,年终奖等等。

到这里,pyhon数据处理及可视化就完成了,接下来我们把数据导入tableau进行可视化处理。

三、tableau可视化呈现

1.城市岗位数量地理图及气泡图

地理图
在这里插入图片描述
气泡图
在这里插入图片描述

2.学历和工作要求

学历要求饼图
在这里插入图片描述
工作经验要求树状图
在这里插入图片描述

3.薪资情况

各个城市岗位数与薪资水平
在这里插入图片描述
不同学历要求的工资水平
在这里插入图片描述
不同工作经验的工资水平
在这里插入图片描述

4.汇总

在这里插入图片描述
在这里插入图片描述
tableau可视化就完成啦

四、分析总结

  1. 数据分析岗位的学历要求以本科,大专为主, 经验中3-5工作经验占多数.
  2. 北上广深杭等经济相对发达的地区对数据分析岗位的需求量大, 且薪资水平较高于其他地区; 学历越高, 经验越丰富对应的薪资水平也会增高.
  3. 一线城市提供的岗位更多,需求更大,薪资水平也更高,因此找数据分析师的工作的可以优先选择北上广深这几个城市。

总结

以上就是这次招聘岗位数据分析要讲的内容,本文简单介绍了数据分析的大概步骤:数据采集——数据预处理——可视化。
其中数据处理和可视化操作均可在excel或者python中完成,tableau也可以进行数据处理,但是并不建议使用。选择工具主要是取决于哪个处理起来更方便快捷。

参考文章
[1]:https://blog.csdn.net/weixin_41261833/article/details/104924038?utm_medium=distribute.pc_relevant.none-task-blog-baidujs_title-0&spm=1001.2101.3001.4242
[2]: https://www.cnblogs.com/star-zhao/p/9873860.html


http://chatgpt.dhexx.cn/article/pZ09Wnv7.shtml

相关文章

可视化工具软件排行榜

市面上的数据可视化工具软件如此之多,有哪些可视化软件工具居于排行榜单的前列呢?你用的软件上榜了吗? 1、FineBI 来自帆软公司,虽作一个BI工具,但是可视化效果不错,可制作Dashboard。优势在于一旦准备好…

2020年六十款数据分析的可视化工具推荐

今天小编将为大家盘点六十款数据分析的可视化工具,让你妥妥的成为会议室乃至全公司最亮的崽~ 1、ChartBlocks ChartBlocks是一款网页版的可视化图表生成工具,在线使用。通过导入电子表格或者数据库来构建可视化图表。整个过程可以在图表的向导指示下完成。它的图表在HTML…

值得推荐的13款可视化软件,快收藏!

数据可视化力求用图表结合的方式把所有的数据整合在某一图像上,这样呈现在观众眼前的画面不仅仅是美观,且比以往长篇大论或是密密麻麻的数据表格更直观易懂,更便于观察分析。到今年上半年为止,国内外已经有了很多发展的较好的数据…

深入分析ArrayMap

前面我们分析了Android为了节省内存提供的一个HahMap<Integer, ?>的替代品SparseArray。SparseArray只能替代key的类型为int的Map。Android也提供了一个key不用局限于int的Map的实现&#xff0c;ArrayMap。老规矩我们通过调试来深入的分析一下ArrayMap&#xff08;看本文…

ArrayMAP介绍

它不是一个适应大数据的数据结构&#xff0c;相比传统的HashMap速度要慢&#xff0c;因为查找方法是二分法&#xff0c;并且当你删除或者添加数据时&#xff0c;会对空间重新调整&#xff0c;在使用大量数据时&#xff0c;效率并不明显&#xff0c;低于50%。 ArrayMap is a ge…

Android特别的数据结构(二)ArrayMap源码解析

1. 数据结构 public final class ArrayMap<K,V> implements Map<K,V> 由两个数组组成&#xff0c;一个int[] mHashes用来存放Key的hash值&#xff0c;一个Object[] mArrays用来连续存放成对的Key和ValuemHashes数组按非严格升序排列初始默认容量为0减容&#xff…

ArrayMap 源码的详细解析

最近在写framework层的系统服务&#xff0c;发现Android 12中用来去重注册监听的map都是用的ArrayMap&#xff0c;因此仔细研究了ArrayMap的原理。 目录 一. ArrayMap概述 二. ArrayMap源码解析 1.主要包含的成员变量 2.构造函数 3. public boolean containsKey(Object ke…

SparseArray和ArrayMap

首先我们来介绍一下HashMap&#xff0c;了解它的优缺点&#xff0c;然后再对比一下其他的数据结构以及为什么要替代它。 HashMap HashMap是由数组单向链表的方式组成的&#xff0c;初始大小是16&#xff08;2的4次方&#xff09;&#xff0c;首次put的时候&#xff0c;才会真…

SparseArray与ArrayMap

SparseArray SparseArray核心代码 两个构造函数默认数组容量10 public SparseArray() {this(10); } public SparseArray(int initialCapacity) {if (initialCapacity 0) {mKeys EmptyArray.INT;mValues EmptyArray.OBJECT;} else {mValues ArrayUtils.newUnpaddedObjectA…

arraymap android,深入剖析 Android中的 ArrayMap

数据集合在任何一门编程语言中都是很重要的一部分&#xff0c;在 Android 开发中&#xff0c;我们会实用到ArrayList, LinkedList, HashMap等。其中HashMap是用来处理键值对需求的常用集合。 而Android中引入了一个新的集合&#xff0c;叫做ArrayMap&#xff0c;为键值对存储需…

ArrayMap 笔记整理

源码基于 API 25 主要参考文章&#xff1a;面试必备&#xff1a;ArrayMap源码解析 1、概述 截图自&#xff1a;面试必备&#xff1a;ArrayMap源码解析 在开始讲解源码之前&#xff0c;需要说明 ArrayMap 的底层实现结构&#xff0c;即两个数组&#xff1a; int[] mHashes; /…

ArrayMap 原理

一 概述 在移动设备端&#xff0c;内存资源很珍贵&#xff0c;HashMap 为实现快速查询带来了很大内存的浪费。为此&#xff0c;2013年5月20日 Google 工程师 Dianne Hackborn 在 Android 系统源码中新增 ArrayMap 类&#xff0c;从 Android 源码中发现有不少提交&#xff0c;专…

不再害怕面试问ArrayMap一文完全看懂Android ArrayMap源码解析

作者&#xff1a;VIjolie 前言 ArrayMap是谷歌推出的在安卓等设备上用于替代HashMap的数据结构&#xff0c;和HashMap相比&#xff0c;具有更高的内存使用率&#xff0c;因此适合在Android等内存较为紧张的移动设备&#xff0c;下面结合源码分析ArrayMap实现原理&#xff0c;主…

ArrayMap原理解析

1.ArrayMap是什么 一个通用的key-value映射数据结构 相比HashMap会占用更少的内存空间 android.util和android.support.v4.util都包含对应的ArrayMap类 2.为什么要使用ArrayMap ArrayMap是一个普通的键值映射的数据结构&#xff0c;这种数据结构比传统的HashMap有着更好的内…

ArrayMap源码解析

一、数据结构 ArrayMap是一个key-value的数据结构&#xff0c;它比HashMap有更高的内存效率 它映射到两个数组结构&#xff1a;一个整数数组mHashes&#xff0c;用来保存key的hashcode&#xff1b;一个对象数组mArray&#xff0c;保存key-value 它不适用于大量数据的存储&…

ArrayMap的使用与详解

数据集合在任何一门编程语言中都是很重要的一部分&#xff0c;在 Android 开发中&#xff0c;我们会实用到List,ArrayList, HashMap等。List和ArrayList配合使用&#xff0c;其中HashMap是用来处理键值对需求的常用集合。 而Android中引入了一个新的集合&#xff0c;叫做ArrayM…

ipdb 调试 - 终端显示正常,日志显示乱码

问题描述 ipdb调试模型&#xff0c;在 vscode 终端正常显示&#xff0c;但日志文件中&#xff0c;输入流将ipdb调试信息的颜色代码记录在文件中&#xff0c;日志文件无法查阅。 解决方案&#xff1a; 提示&#xff1a;修改ipdb的终端颜色属性 点击 ipdb&#xff0c;进入 ipdb …

ipdb调试dataloader

ipdb不可以直接放入__init__/__len__/__getitem__进行调试 需要在主函数中中断调试&#xff0c;例如colab中&#xff1a; 输入需要查询的变量即可

初次使用python(2)之如何下载ipdb模块

上次提到了ipdb这个python中用于进行调试的模块&#xff0c;但在python中是额外的package。所以&#xff0c;这篇文章写得是如何下载ipdb模块。 在Windows环境中&#xff0c;需要用pip来下载所有模块。 1.安装pip 我们仍需要在python官网上找到pip文件&#xff0c;下载地址是&a…

python ipdb 调试代码

python ipdb 调试代码 安装 pip install ipdb使用 第一种方法 python -m ipdb xxx.py #单步调试也可以写一个.py文件&#xff0c;如下&#xff0c;来执行。 import os os.system(python -m ipdb xxx.py)第二种方法 在需要断点的地方插入两句话 from ipdb import set_tra…